sourcecode 5.8.25__tar.gz → 5.8.26__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 (418) hide show
  1. {sourcecode-5.8.25 → sourcecode-5.8.26}/.github/workflows/windows-battery.yml +19 -0
  2. {sourcecode-5.8.25 → sourcecode-5.8.26}/CHANGELOG.md +8 -0
  3. {sourcecode-5.8.25 → sourcecode-5.8.26}/PKG-INFO +4 -4
  4. {sourcecode-5.8.25 → sourcecode-5.8.26}/README.md +3 -3
  5. sourcecode-5.8.26/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +63 -0
  6. sourcecode-5.8.26/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +121 -0
  7. sourcecode-5.8.26/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +173 -0
  8. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/DEFECT-LEDGER.md +69 -0
  9. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/DEVELOPMENT-ROADMAP.md +1 -1
  10. {sourcecode-5.8.25 → sourcecode-5.8.26}/pyproject.toml +1 -1
  11. {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/perf_harness.py +13 -3
  12. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_report.py +43 -0
  14. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/baseline_autocapture.py +9 -4
  15. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cache_model.py +3 -4
  16. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cli.py +114 -15
  17. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/envelope.py +4 -2
  18. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/explain.py +43 -1
  19. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/format_contract.py +3 -3
  20. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/migrate_check.py +21 -2
  21. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/non_coverage.py +46 -1
  22. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/packs.py +85 -1
  23. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/parse_cache.py +16 -0
  24. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/posture.py +17 -1
  25. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/product_info.py +25 -1
  26. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/repository_ir.py +118 -50
  27. sourcecode-5.8.26/src/sourcecode/sarif_emit.py +156 -0
  28. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schema_registry.py +5 -0
  29. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_posture.py +12 -0
  30. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/selftest.py +8 -2
  31. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/serializer.py +21 -2
  32. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_impact.py +101 -0
  33. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_tx_analyzer.py +8 -0
  34. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/workspace.py +1 -1
  35. {sourcecode-5.8.25 → sourcecode-5.8.26}/.github/workflows/build-windows.yml +0 -0
  36. {sourcecode-5.8.25 → sourcecode-5.8.26}/.github/workflows/perf-gate.yml +0 -0
  37. {sourcecode-5.8.25 → sourcecode-5.8.26}/.gitignore +0 -0
  38. {sourcecode-5.8.25 → sourcecode-5.8.26}/.ruff.toml +0 -0
  39. {sourcecode-5.8.25 → sourcecode-5.8.26}/CLAUDE.md +0 -0
  40. {sourcecode-5.8.25 → sourcecode-5.8.26}/CONTRIBUTING.md +0 -0
  41. {sourcecode-5.8.25 → sourcecode-5.8.26}/LICENSE +0 -0
  42. {sourcecode-5.8.25 → sourcecode-5.8.26}/NOTICE +0 -0
  43. {sourcecode-5.8.25 → sourcecode-5.8.26}/SECURITY.md +0 -0
  44. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
  45. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
  46. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
  47. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
  48. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/CACHE.md +0 -0
  49. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/COMMERCIAL-OFFER.md +0 -0
  50. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/CUSTOMER-VALIDATION.md +0 -0
  51. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/DEMO-5MIN.md +0 -0
  52. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/EXECUTION-PLAN-12MO.md +0 -0
  53. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/EXECUTIVE-ROADMAP.md +0 -0
  54. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/MANUAL-USUARIO.md +0 -0
  55. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/MODERNIZATION.md +0 -0
  56. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT-ROUTE.md +0 -0
  57. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT_AUDIT.md +0 -0
  58. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT_IDENTITY.md +0 -0
  59. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT_TIERS.md +0 -0
  60. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/RC1-CHECKLIST.md +0 -0
  61. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/RELEASE-CHECKLIST.md +0 -0
  62. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/USER_GUIDE.md +0 -0
  63. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  64. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
  65. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-assessment-report.md +0 -0
  66. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
  67. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  68. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  69. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  70. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  71. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  72. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  73. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
  74. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-pack-manifest.md +0 -0
  75. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
  76. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  77. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  78. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  79. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  80. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  81. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  82. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  83. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  84. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  85. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  86. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  87. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  88. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0006-performance-harness.md +0 -0
  89. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  90. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  91. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/consumer-disposition-inventory.md +0 -0
  92. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/overview.md +0 -0
  93. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/product-architecture-review.md +0 -0
  94. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/product-strategy-layering.md +0 -0
  95. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  96. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/semantic-ir-roadmap.md +0 -0
  97. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/baseline-ci.yml +0 -0
  98. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/commercial-pipeline-audit.md +0 -0
  99. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/contracts-ci.yml +0 -0
  100. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/contracts.md +0 -0
  101. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  102. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  103. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  104. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  105. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  106. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  107. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  108. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  109. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/licensing-schema.md +0 -0
  110. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/migrate-check.md +0 -0
  111. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/pack-gate-github-actions.yml +0 -0
  112. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/pack-gate-gitlab.yml +0 -0
  113. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/README.md +0 -0
  114. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/REGRESSION-GATE.md +0 -0
  115. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  116. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  117. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  118. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  119. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  120. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  121. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  122. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  123. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  124. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  125. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  126. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  127. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  128. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  129. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  130. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  131. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  132. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  133. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  134. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  135. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  136. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  137. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  138. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  139. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  140. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  141. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  142. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  143. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  144. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  145. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  146. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  147. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  148. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  149. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  150. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  151. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  152. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  153. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  154. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  155. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  156. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  157. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/README.md +0 -0
  158. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  159. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  160. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  161. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  162. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  163. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  164. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/reference-best/README.md +0 -0
  165. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/corpus-testing-2026-08-22.md +0 -0
  166. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/posture.md +0 -0
  167. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/privacy.md +0 -0
  168. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/pro-experience-audit.md +0 -0
  169. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/schema.md +0 -0
  170. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/spec/envelope-v1.md +0 -0
  171. {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/spring-audit-ci.yml +0 -0
  172. {sourcecode-5.8.25 → sourcecode-5.8.26}/hatch_build.py +0 -0
  173. {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/compare_integration_engines.py +0 -0
  174. {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/customer_smoke_test.sh +0 -0
  175. {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/generate_jdk_exports.py +0 -0
  176. {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/perf_gate.py +0 -0
  177. {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/sync_gate_anchors.py +0 -0
  178. {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/test_fast.sh +0 -0
  179. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/adaptive_scanner.py +0 -0
  180. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/analysis_budget.py +0 -0
  181. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/answer_bounds.py +0 -0
  182. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/archetype.py +0 -0
  183. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architectural_baseline.py +0 -0
  184. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architectural_delta.py +0 -0
  185. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architecture_analyzer.py +0 -0
  186. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architecture_summary.py +0 -0
  187. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ast_extractor.py +0 -0
  188. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_clusters.py +0 -0
  189. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_recipe.py +0 -0
  190. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_since.py +0 -0
  191. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/breaking_changes.py +0 -0
  192. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/build_modules.py +0 -0
  193. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/build_stamp.py +0 -0
  194. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/bundled_docs.py +0 -0
  195. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cache.py +0 -0
  196. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cache_observation.py +0 -0
  197. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/call_surface.py +0 -0
  198. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/caller_metrics.py +0 -0
  199. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/caller_reach.py +0 -0
  200. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/canonical_ir.py +0 -0
  201. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/chain_rules.py +0 -0
  202. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/change_plan.py +0 -0
  203. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ci_output.py +0 -0
  204. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cir_graphs.py +0 -0
  205. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/classifier.py +0 -0
  206. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/client_calls.py +0 -0
  207. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/code_notes_analyzer.py +0 -0
  208. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/compare.py +0 -0
  209. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/confidence_analyzer.py +0 -0
  210. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/constraint_diff.py +0 -0
  211. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/consumer_join.py +0 -0
  212. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/container_wiring.py +0 -0
  213. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_cache.py +0 -0
  214. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_graph.py +0 -0
  215. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_scorer.py +0 -0
  216. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_summarizer.py +0 -0
  217. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_diff.py +0 -0
  218. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_init.py +0 -0
  219. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_model.py +0 -0
  220. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_pipeline.py +0 -0
  221. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/coverage_parser.py +0 -0
  222. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/data_exposure.py +0 -0
  223. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/data_labels.py +0 -0
  224. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/declarations.py +0 -0
  225. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/defect_classes/__init__.py +0 -0
  226. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/defect_classes/registry.json +0 -0
  227. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/defect_identity.py +0 -0
  228. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/degradation.py +0 -0
  229. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/dependency_analyzer.py +0 -0
  230. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/deployment_prefix.py +0 -0
  231. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detach.py +0 -0
  232. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/__init__.py +0 -0
  233. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/base.py +0 -0
  234. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/csproj_parser.py +0 -0
  235. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/dart.py +0 -0
  236. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/dotnet.py +0 -0
  237. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/elixir.py +0 -0
  238. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/go.py +0 -0
  239. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/heuristic.py +0 -0
  240. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/hybrid.py +0 -0
  241. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/java.py +0 -0
  242. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/jvm_ext.py +0 -0
  243. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/nodejs.py +0 -0
  244. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/parsers.py +0 -0
  245. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/php.py +0 -0
  246. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/project.py +0 -0
  247. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/python.py +0 -0
  248. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/ruby.py +0 -0
  249. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/rust.py +0 -0
  250. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/systems.py +0 -0
  251. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/terraform.py +0 -0
  252. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/tooling.py +0 -0
  253. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/doc_analyzer.py +0 -0
  254. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/dynamic_argument_surface.py +0 -0
  255. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/empty_reach.py +0 -0
  256. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/endpoint_disposition.py +0 -0
  257. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/endpoint_literals.py +0 -0
  258. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/endpoint_metrics.py +0 -0
  259. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/entrypoint_classifier.py +0 -0
  260. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/env_analyzer.py +0 -0
  261. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/environment_resolution.py +0 -0
  262. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/error_schema.py +0 -0
  263. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/evidence_provider.py +0 -0
  264. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/execution_plan.py +0 -0
  265. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/explain_endpoint.py +0 -0
  266. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/facts/__init__.py +0 -0
  267. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/facts/registry.json +0 -0
  268. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/field_deprecations.py +0 -0
  269. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/file_chunker.py +0 -0
  270. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/file_classifier.py +0 -0
  271. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/filter_surface.py +0 -0
  272. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/fqn_utils.py +0 -0
  273. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/functional_routes.py +0 -0
  274. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/gate_anchors.py +0 -0
  275. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/git_analyzer.py +0 -0
  276. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/git_checkout.py +0 -0
  277. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/github_diff.py +0 -0
  278. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/graph_analyzer.py +0 -0
  279. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/graph_evidence.py +0 -0
  280. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/hibernate_strat.py +0 -0
  281. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/identity_fallback.py +0 -0
  282. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/integration_coordinates.py +0 -0
  283. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/jdk_exports.py +0 -0
  284. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/license.py +0 -0
  285. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/manifest_cache.py +0 -0
  286. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/__init__.py +0 -0
  287. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/dependency_import.py +0 -0
  288. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  289. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  290. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  291. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  292. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  293. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/orchestrator.py +0 -0
  294. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/registry.py +0 -0
  295. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/runner.py +0 -0
  296. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/server.py +0 -0
  297. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp_nudge.py +0 -0
  298. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/metrics_analyzer.py +0 -0
  299. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/migration_apply.py +0 -0
  300. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/migration_blast.py +0 -0
  301. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/openapi_surface.py +0 -0
  302. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/openrewrite_recipe.py +0 -0
  303. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_bounds.py +0 -0
  304. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_budget.py +0 -0
  305. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_ceiling.py +0 -0
  306. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_encoding.py +0 -0
  307. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_sink.py +0 -0
  308. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pack_manifest.py +0 -0
  309. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/parallel.py +0 -0
  310. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/partial_contract.py +0 -0
  311. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/path_admission.py +0 -0
  312. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/path_filters.py +0 -0
  313. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/perf.py +0 -0
  314. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/phased_run.py +0 -0
  315. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pipe_contract.py +0 -0
  316. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pr_comment_renderer.py +0 -0
  317. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pr_impact.py +0 -0
  318. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/prepare_context.py +0 -0
  319. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/progress.py +0 -0
  320. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/provenance.py +0 -0
  321. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ranking_engine.py +0 -0
  322. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/readiness_timeline.py +0 -0
  323. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/readonly.py +0 -0
  324. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/reconciliation.py +0 -0
  325. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/redactor.py +0 -0
  326. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/reference_facts.py +0 -0
  327. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/regress.py +0 -0
  328. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/release_info.py +0 -0
  329. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/relevance_scorer.py +0 -0
  330. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/remediation_diff.py +0 -0
  331. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/remedies.py +0 -0
  332. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/rename_refactor.py +0 -0
  333. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/repo_classifier.py +0 -0
  334. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/resource_budget.py +0 -0
  335. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/__init__.py +0 -0
  336. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/context.py +0 -0
  337. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/errors.py +0 -0
  338. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/executor.py +0 -0
  339. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/planner.py +0 -0
  340. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/query.py +0 -0
  341. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/request.py +0 -0
  342. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/resolution.py +0 -0
  343. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/result.py +0 -0
  344. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/retriever.py +0 -0
  345. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/runtime.py +0 -0
  346. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps.py +0 -0
  347. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  348. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_graph.py +0 -0
  349. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_impact.py +0 -0
  350. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_intf.py +0 -0
  351. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_struct.py +0 -0
  352. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  353. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ris.py +0 -0
  354. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/risk.py +0 -0
  355. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/risk_model.py +0 -0
  356. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/rule_catalog.py +0 -0
  357. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/rule_pass.py +0 -0
  358. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/runs.py +0 -0
  359. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/runtime_classifier.py +0 -0
  360. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/sarif.py +0 -0
  361. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/scanner.py +0 -0
  362. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schema.py +0 -0
  363. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schema_producers.py +0 -0
  364. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  365. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  366. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  367. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  368. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  369. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  370. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_chain.py +0 -0
  371. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_config.py +0 -0
  372. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_config_scan.py +0 -0
  373. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/selection_contract.py +0 -0
  374. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_analyzer.py +0 -0
  375. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_impact_engine.py +0 -0
  376. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_integration_engine.py +0 -0
  377. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_services.py +0 -0
  378. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/servlet_surface.py +0 -0
  379. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/source_text.py +0 -0
  380. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_event_topology.py +0 -0
  381. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_findings.py +0 -0
  382. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_model.py +0 -0
  383. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_profiles.py +0 -0
  384. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_properties.py +0 -0
  385. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_security_audit.py +0 -0
  386. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_semantic.py +0 -0
  387. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/sql_taint.py +0 -0
  388. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/summarizer.py +0 -0
  389. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/target_admission.py +0 -0
  390. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/__init__.py +0 -0
  391. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/config.py +0 -0
  392. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/consent.py +0 -0
  393. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/events.py +0 -0
  394. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/filters.py +0 -0
  395. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/transport.py +0 -0
  396. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/test_gap_ranking.py +0 -0
  397. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/test_sources.py +0 -0
  398. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/text_input.py +0 -0
  399. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/timeline.py +0 -0
  400. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/timeline_cache.py +0 -0
  401. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/token_estimate.py +0 -0
  402. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/tree_utils.py +0 -0
  403. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/type_usage_surface.py +0 -0
  404. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/validation_inference.py +0 -0
  405. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/validation_surface.py +0 -0
  406. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/verify_edit.py +0 -0
  407. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/verify_repo.py +0 -0
  408. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/verify_rules.py +0 -0
  409. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/version_check.py +0 -0
  410. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/waivers.py +0 -0
  411. {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/wired_surface.py +0 -0
  412. {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/README.md +0 -0
  413. {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/get-license/index.ts +0 -0
  414. {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  415. {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/telemetry/index.ts +0 -0
  416. {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/sql/license_event_ordering.sql +0 -0
  417. {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/sql/licensing_schema.sql +0 -0
  418. {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/sql/telemetry_events.sql +0 -0
@@ -16,6 +16,14 @@ on:
16
16
  jobs:
17
17
  battery:
18
18
  runs-on: windows-latest
19
+ env:
20
+ NO_COLOR: "1"
21
+ TERM: "dumb"
22
+ # CLI payloads and diagnostics are UTF-8 contracts. Without this Windows
23
+ # decodes child-process output with the active code page, turning a valid
24
+ # JSON answer containing source text into an empty/failed test response.
25
+ PYTHONUTF8: "1"
26
+ PYTHONIOENCODING: "utf-8"
19
27
  steps:
20
28
  - uses: actions/checkout@v4
21
29
 
@@ -31,11 +39,22 @@ jobs:
31
39
 
32
40
  - name: Suite
33
41
  run: pytest
42
+ # `runner.*` is valid at step scope. Both stores stay outside the
43
+ # checkout so their files never become untracked input to an analysis.
44
+ env:
45
+ SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
46
+ SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
34
47
 
35
48
  # Named separately so a Windows-only failure is legible in the job list
36
49
  # rather than one dot in nine thousand.
37
50
  - name: The envelope names its command on every entry path
38
51
  run: pytest tests/test_the_envelope_names_its_command_on_every_entry_path_aud601_x01.py -v
52
+ env:
53
+ SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
54
+ SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
39
55
 
40
56
  - name: A footprint sample is a number or a stated null, never a zero
41
57
  run: pytest tests/test_resource_budget_d10.py -v
58
+ env:
59
+ SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
60
+ SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.8.26] — 2026-08-23
4
+
5
+ *Patch release for the expanded-corpus audit. It preserves endpoint declarations
6
+ whose FQN is reused by separate modules, pairs MyBatis XML against the analysed
7
+ tree rather than a compact display subset, and reports the runtime source commit
8
+ for editable installs. Route inheritance and JAX-RS locator composition were
9
+ revalidated after the module-identity change.*
10
+
3
11
  ## [5.8.25] — 2026-08-23
4
12
 
5
13
  *Version and documentation synchronization release. The audited `5.8.24` tree is
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.8.25
3
+ Version: 5.8.26
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.25-blue)
61
+ ![Version](https://img.shields.io/badge/version-5.8.26-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
@@ -176,7 +176,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
176
176
  answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
177
177
  unset, or set it to `0`, to disable the ceiling explicitly.
178
178
 
179
- **Current performance status.** Release 5.8.25 retains the shared Canonical IR
179
+ **Current performance status.** Release 5.8.26 retains the shared Canonical IR
180
180
  path used by `validation` and now passes that same CIR into labelled `data-exposure`
181
181
  runs; the no-label path remains parse-free. The one-model-per-declared-label path is
182
182
  also retained. These are implementation properties, not duration promises:
@@ -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.25 — and, on a build that has aged,
213
+ ask version # ask 5.8.26 — 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.25-blue)
13
+ ![Version](https://img.shields.io/badge/version-5.8.26-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,7 +128,7 @@ 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.25 retains the shared Canonical IR
131
+ **Current performance status.** Release 5.8.26 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. The one-model-per-declared-label path is
134
134
  also retained. These are implementation properties, not duration promises:
@@ -162,7 +162,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
162
162
  # pip / pipx
163
163
  pipx install sourcecode # or: pip install sourcecode
164
164
 
165
- ask version # ask 5.8.25 — and, on a build that has aged,
165
+ ask version # ask 5.8.26 — and, on a build that has aged,
166
166
  # how many releases have probably shipped since
167
167
  ```
168
168
 
@@ -0,0 +1,63 @@
1
+ # Intake de hallazgos — corpus ampliado ASK 5.8.25
2
+
3
+ **Fecha:** 2026-08-23
4
+ **Build externo:** `5.8.25`, `b6e0e0f`
5
+ **Fuente:** [`/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md`](/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md)
6
+ **Estado:** intake incorporado; sin correcciones de código en esta tarea.
7
+
8
+ ## Criterio de triage
9
+
10
+ El corpus aporta reproducción exacta y contraste manual. Los hallazgos se registran como
11
+ **reportados externamente** hasta reproducirlos contra el checkout o wheel correspondiente.
12
+ No se convierten en vulnerabilidades del repositorio auditado: describen límites, falsos
13
+ negativos, falsos positivos o contratos ambiguos de ASK. Los cuatro P0 deben tener prioridad
14
+ antes de nuevas features comerciales.
15
+
16
+ ## Bugs y regresiones
17
+
18
+ | Severidad | ID | Hallazgo | Acción requerida | Estado |
19
+ |---|---|---|---|---|
20
+ | P0 | `AUD-CA-001` | `posture.security` es Spring-Security-only, pero `stack_fit` trata Spring + Shiro como ausencia de control. | Separar `spring_detected` de `spring_security_detected`; publicar `unknown` y framework no modelado. | Corregido 5.8.25: Shiro queda declarado como no modelado y el acceso como `unknown` |
21
+ | P0 | `AUD-CA-002` | `@RequiresPermissionsDesc` descriptiva suprime un finding al retirar el gate real `@RequiresPermissions`. | Exigir evidencia de enforcement; no inferir gates por nombre; cualquier transición desde roles debe activar `security_delta`. | Reportado, reproducir |
22
+ | P0 | `AUD-CA-003` | Colisión de FQN entre módulos descarta rutas y seguridad sin declaración. | Identidad `(módulo, FQN)` o ruta; declarar descartes si se conserva una sola definición. | Reportado, reproducir |
23
+ | P0 | `AUD-CA-014` | 89 controladores Micronaut no aparecen en `endpoints` y el vocabulario no declara el framework. | Añadir `micronaut` como estilo detectado-no-soportado y gap cuantificado; después implementar soporte. | Parcial 5.8.25: superficie Micronaut declarada y cuantificada; soporte HTTP pendiente |
24
+ | P1 | `AUD-CA-004` | `none_detected` mezcla cadena no modelada con ruta pública por regla URL. | Modelar `ShiroFilterFactoryBean` o separar estados `chain_not_modelled` y `chain_public`. | Reportado, reproducir |
25
+ | P1 | `AUD-CA-005` | Regla por nombre de módulo excluye código real bajo `src/main`. | Basar exclusión en source sets (`src/test`, `src/it`), no en nombre de módulo. | Corregido 5.8.25: `src/main` prevalece; sólo quedan módulos fixture explícitos |
26
+ | P1 | `AUD-CA-006` | `entry_points` alterna objeto/array bajo `schema_version: 1.0`; además duplica `(path, kind)`. | Fijar un schema; separar poblaciones si procede y deduplicar por `(path, kind)`. | Reportado, reproducir |
27
+ | P1 | `AUD-CA-007` | Repositorio políglota sin build file en raíz deja inventario Java vacío pese a `primary: java`. | Descubrir manifests en el reactor; particionar dependencias por stack y declarar contradicciones. | Reportado, reproducir |
28
+ | P1 | `AUD-CA-008` | Índice MyBatis incompleto produce `mapper_interfaces: 0` y 100% de XML huérfanos falsos. | Resolver namespace contra índice completo; si el índice está incompleto, no emitir huérfanos. | Reportado, reproducir |
29
+ | P1 | `AUD-CA-009` | `migrate-check` omite dependencias directas incompatibles con Boot 3 y publica esfuerzo con confianza alta. | Añadir compatibilidad de dependencias declaradas; mientras tanto, publicar `non_coverage` y retirar `point_estimate/high`. | Reportado, reproducir |
30
+ | P1 | `AUD-CA-015` | Titular `7 endpoints` oculta 21.023 rutas excluidas. | Incluir proporción y exclusiones en el titular cuando superen el umbral; mantener detalle en `answer_bounds`. | Reportado, reproducir |
31
+ | P2 | `AUD-CA-010` | `ask --compact` y `endpoints` discrepan en el censo de controladores. | Unificar autoridad y población; publicar unidad y base del censo. | Reportado, reproducir |
32
+ | P2 | `AUD-CA-011` | SEC-008 no cualifica alcanzabilidad; 41% del volumen procede de boilerplate MyBatis Generator. | Filtrar por rutas HTTP alcanzables y agrupar por expresión + fichero. | Reportado, reproducir |
33
+ | P2 | `AUD-CA-012` | `verify-edit` publica `source_file: null` aunque `endpoints` sí tiene ancla `file:line`. | Reutilizar la autoridad de endpoints para anclar el diff. | Reportado, reproducir |
34
+ | P2 | `AUD-CA-016` | `zero_result_reason` termina en una conjunción (`and `) y espacio final. | Construir la enumeración sin elementos vacíos y probar el texto completo. | Reportado, reproducir |
35
+ | P3 | `AUD-CA-013` | `explain.public_methods` colapsa sobrecargas y carece de unidad/población/base. | Publicar firmas o identificadores de método y metadatos de población. | Corregido 5.8.25: `public_methods_detail` conserva firmas y anclas |
36
+ | P3 | `AUD-CA-017` | `excluded_by_module_name_rule.count` es `null` mientras la cifra sólo existe en prosa. | Publicar el contador numérico desde la misma autoridad que genera el gap. | Corregido 5.8.25: `count` y `unit` publicados |
37
+
38
+ ## Prioridad de ejecución
39
+
40
+ 1. Seguridad y superficie: `AUD-CA-001`, `AUD-CA-002`, `AUD-CA-003`, `AUD-CA-004` y
41
+ `AUD-CA-014`.
42
+ 2. Integridad de inventario y contratos: `AUD-CA-005` a `AUD-CA-010` y `AUD-CA-012`.
43
+ 3. Precisión comercial y legibilidad: `AUD-CA-011`, `AUD-CA-015`, `AUD-CA-016`,
44
+ `AUD-CA-013` y `AUD-CA-017`.
45
+
46
+ ## Criterios de cierre
47
+
48
+ - Cada hallazgo reproducido debe tener test de regresión con el repositorio testigo o una
49
+ fixture mínima equivalente.
50
+ - Toda exclusión debe declarar población, motivo, contador y efecto sobre `answer_bounds`.
51
+ - Ningún `none`, `0`, `clean` o `point_estimate/high` puede publicarse cuando el eje o el
52
+ índice necesario no está modelado.
53
+ - Cambios de schema deben conservar una única forma por versión y actualizar consumidores,
54
+ schemas y fixtures.
55
+ - Los P0 no se cierran por texto o mitigación documental: requieren evidencia de código y
56
+ batería verde.
57
+
58
+ ## No clasificado como bug
59
+
60
+ El corpus también confirma determinismo caliente, ausencia de escrituras en los checkouts,
61
+ separación correcta de fuentes de test, `declared_not_served`, varias coberturas Quarkus y
62
+ Micronaut a escala de ejecución. Es evidencia positiva que debe preservarse, no trabajo
63
+ pendiente.
@@ -0,0 +1,121 @@
1
+ # Auditoría externa de regresión — ASK Engine 5.8.25
2
+
3
+ **Fecha de recepción:** 2026-08-23
4
+ **Artefacto auditado:** ASK Engine `5.8.25`, build `b6e0e0f157687a962ce66627afe2e9b388fb2f06`
5
+ **Entornos:** Windows 11 Pro y MSAS (`3dde0376`)
6
+ **Alcance:** aproximadamente 180 invocaciones, 0 tracebacks, 0 escrituras observadas.
7
+
8
+ ## Estado posterior del checkout
9
+
10
+ **Verificado el 2026-08-23 contra `HEAD 3d56d11`**, posterior al artefacto auditado.
11
+ Este bloque es el estado operativo actual; la evidencia del informe externo que sigue se
12
+ conserva sin alterar.
13
+
14
+ - La versión del repositorio es `5.8.25`.
15
+ - `125e486` corrigió la serialización de rutas en Windows y la detección de `ask.exe` en
16
+ selftest.
17
+ - `735d766` corrigió el fallback de contexto de comando, el bounding de flags en variantes
18
+ Click/Typer, las rutas POSIX del workspace y la configuración de salida del job Windows.
19
+ - `434d0e2` excluyó `_cache` runtime del `content_id` y añadió la regresión frío/caliente.
20
+ - `cd3f8f1` añadió un sweep final del parse cache para no dejar el último intervalo sin
21
+ eviction al terminar una invocación.
22
+ - `e9f5861` definió `--ci` para migraciones como gate de `migration_blocking_count`, y
23
+ `49187f9` etiqueta explícitamente los benchmarks históricos antes de reutilizarlos.
24
+ - `3d56d11` reinició la observabilidad de caché por invocación, evitando que una ejecución
25
+ embebida contamine el tamaño o el estado de la siguiente.
26
+ - La batería completa pasa en verde usando directorios separados para
27
+ `SOURCECODE_CONTEXT_CACHE_DIR` y `SOURCECODE_CACHE_DIR`. Configurar sólo uno produce
28
+ falsos fallos de snapshots/RIS.
29
+ - `ASK-DET-002`, `B-26` y `ASK-GATE-001` tienen fix en el checkout y batería dirigida verde;
30
+ falta validar el wheel/CI Windows para cerrar la evidencia externa.
31
+ - `ASK-UX-001`, `ASK-UX-002` y `ASK-ENV-001` tienen corrección o mitigación en el checkout,
32
+ pero requieren verificación del wheel publicado y un job Windows verde antes de cerrarse.
33
+ - `B-11` tiene mitigación de comunicación en el checkout; la regeneración numérica de
34
+ anclas requiere una captura reproducible posterior. Siguen abiertos `ASK-PERF-003` y la
35
+ reconciliación `B-13`/`B-14`; las filas sin cita y `B-30` permanecen como deuda P3.
36
+
37
+ ### Cola vigente después de `HEAD 3d56d11`
38
+
39
+ | Estado | IDs | Siguiente evidencia requerida |
40
+ |---|---|---|
41
+ | Fix local / validación externa | `ASK-DET-002`, `B-26`, `ASK-GATE-001` | Confirmar wheel publicado y batería Windows/GitHub. |
42
+ | Mitigación local / dato pendiente | `B-11` | Capturar benchmarks con build, commit y protocolo actuales. |
43
+ | Validación | `ASK-UX-001`, `ASK-UX-002`, `ASK-ENV-001` | Repetir contra wheel exacto y confirmar batería Windows en CI. |
44
+ | Investigación | `ASK-PERF-003`, `B-13`/`B-14` | Medición aislada y reproducción con artefacto/par exactos. |
45
+ | Futuro | Gate PR, contexto acotado, migración Boot/Java, provenance HTTP, SARIF | Plan de producto posterior a los contratos de confianza. |
46
+
47
+ ## Veredicto ejecutivo
48
+
49
+ El informe no demuestra una regresión funcional del analizador. Sí demuestra un defecto
50
+ de determinismo/procedencia en el payload raíz, varios contratos de producto incompletos y
51
+ una divergencia de entorno Windows que no puede darse por cerrada desde macOS/Linux.
52
+
53
+ La prioridad de la siguiente iteración no es optimizar todas las cifras de tiempo: es hacer
54
+ que una misma respuesta sea estable, explicable y utilizable en CI. Sin esa base, los
55
+ benchmarks y la procedencia pierden valor comercial.
56
+
57
+ ## Bugs y regresiones prioritarios
58
+
59
+ | Prioridad | ID | Resultado de la auditoría | Decisión |
60
+ |---|---|---|---|
61
+ | P1 | `ASK-DET-002` | `ask . --output raw1.json` produjo dos `content_id` para el mismo árbol: `8e3a1cd54154e2eb` en frío y `f81481e0fea47e02` en caliente. Las 20 diferencias están en `_cache` (`cache_source`, `ris_exists`, `ris_git_head`, `ris_is_stale`). | **Bug confirmado.** El hash de contenido incluye estado de ejecución. Separar respuesta analítica de metadatos de ejecución, o excluir `_cache` del `content_id`; añadir prueba frío/caliente y estabilidad tras repetir. |
62
+ | P1 | `B-26` / `ASK-17` | En la flota de 16 repositorios el parse cache alcanzó aproximadamente 559.48 MB frente a un presupuesto de 512 MB, con 25.560 entradas. | **Problema de capacidad confirmado, no fallo aislado de análisis.** Publicar exceso, política de eviction y estado efectivo; decidir si el límite es por workspace, usuario o flota antes de prometer escala empresarial. |
63
+ | P1/P2 | `ASK-UX-001` / `N-01` | El bloque “Runs now” sigue presentando `posture . --diff dev:prod` y `endpoints .` sin una forma de acotar el resultado. | **Residuo confirmado en el artefacto auditado.** El generador ya se corrigió parcialmente en el checkout; falta verificar el wheel publicado y cubrir la población completa del bloque. |
64
+ | P1/P2 | `ASK-UX-002` | El sistema de sugerencias entra en ciclo: sin flags ofrece `--compact`/`--limit`; con uno ofrece el otro; ambas variantes producen exactamente 71.722 tokens. | **Bug confirmado.** Las sugerencias deben ser conscientes del comando, del camino de renderizado y de `flags_already_passed`; nunca recomendar una transformación que no reduzca el payload. |
65
+ | P1/P2 | `ASK-ENV-001` | En Windows, 9/9 payloads llegaron con `envelope_status=degraded`, `command=unknown` y razón “the running command could not be named”. | **Regresión ambiental pendiente de reproducir.** No contradice la prueba local, pero sí invalida declarar el caso cerrado. El pipeline Windows debe fallar si el contrato se degrada sin base explícita. |
66
+ | P2 | `ASK-GATE-001` | `spring-audit --ci` y `risk --ci` devuelven el contrato de gate; `migrate-check --ci` y `migrate-apply --ci` rechazan la opción. | **Contrato inconsistente confirmado.** Definir por comando si `--ci` es gate de completitud, gate de findings o no aplica; después alinear help, exit code, schema y pruebas. No añadir la bandera por simetría sin definir su semántica. |
67
+ | P2 | `B-11` | 16 de 19 anclas de coste siguen referenciando `5.1.0`; una referencia `5.8.23`. | **Deuda de credibilidad.** No rompe el análisis, pero debilita cualquier benchmark comercial. Regenerar anclas o marcarlas explícitamente como históricas y exigir versión/build en cada cifra. |
68
+ | P2 | `ASK-PERF-003` | Varios comandos parecen más lentos que en `5.8.24`, mientras `export --c4` mejora y `ask --compact` también. | **No es regresión confirmada.** El auditor identifica contaminación por ejecuciones concurrentes y estados de caché. Repetir en aislamiento, con protocolo frío/sembrado/caliente y al menos tres muestras antes de abrir un fix. |
69
+ | P3 | Cierre de auditoría | 25 filas cerradas permanecen sin cita (`uncited`). | **Higiene de procedencia.** Automatizar la cita o etiquetar la ausencia intencionada; no bloquear una release salvo que afecte a una afirmación comercial. |
70
+ | P3 | `B-30` | 20 contratos arquitectónicos aparecen como `forbid_finding` y no utilizan la población “17 endpoints / 39 tipos”. | **Oportunidad futura.** Convertirlo en producto sólo cuando existan contratos positivos, tipos útiles y una explicación de por qué una regla no aplica. |
71
+ | Reconciliación | `B-13` / `B-14` | El informe externo observa identidad ausente y una negativa byte-identical; el re-audit del checkout documenta identidad y no reproduce el caso `mall`/`nacos`. | **No reabrir automáticamente.** Reproducir contra el wheel exacto y el par exacto del informe. Si reproduce, prevalece el test de población; si no, registrar discrepancia de artefacto, no un bug nuevo. |
72
+
73
+ ## Qué no se clasifica como regresión
74
+
75
+ - No hay regresión funcional demostrada, crash, traceback, escritura o mutación del repositorio auditado.
76
+ - Las diferencias de tiempos no son atribuibles todavía a una versión: faltan ejecuciones aisladas y control de caché.
77
+ - El resultado de “clean repo no encuentra riesgo” no es un bug; es el límite correcto del análisis. Debe expresarse como no-cobertura, no maquillarse como finding.
78
+ - `data-exposure` sin labels/configuración suficiente es una limitación de entrada y onboarding, no una vulnerabilidad del motor.
79
+
80
+ ## Recomendaciones del auditor, validadas como CTO
81
+
82
+ | Recomendación | Validación | Acción de producto |
83
+ |---|---|---|
84
+ | Priorizar un gate semántico de PR | **Alta.** Es la demostración más directa de valor: cambio concreto, finding accionable, evidencia `file:line` y exit code. | Convertir `pack gate --since <ref>` en workflow de referencia y medir findings por PR, severidad y bugs evitados. |
85
+ | Entregar contexto acotado para agentes | **Alta.** Reduce tokens y tiempo de integración; ya hay evidencia de payloads bajo techo. | Consolidar `--compact`, `--agent` y `prepare-context` con límites verificables y KPI de tokens/call y éxito de tarea. |
86
+ | Inventario Boot 2→3 / Java LTS | **Alta.** Tiene comprador, urgencia y unidad de trabajo clara: archivo, línea, bloqueo y esfuerzo. | Hacer de `migrate-check` + recipe el segundo caso comercial, con blockers/lines/days como métricas. |
87
+ | HTTP exposure con provenance | **Alta.** Es defendible ante seguridad si cada ruta lleva fuente, declaración, postura y límites. | Completar `endpoints` + `posture` + `explain-endpoint`, incluyendo negativas y población. |
88
+ | Enriquecimiento SARIF de Semgrep/CodeQL | **Media-alta, después de lo anterior.** Amplía distribución sin competir construyendo otro SAST. | Mantenerlo como integración: anclar, componer y explicar findings externos; medir porcentaje alcanzable por request no autenticada. |
89
+ | Mejorar hints, CI y envelope | **Imprescindible, aunque no sea una feature vendible por sí sola.** Son prerequisitos de confianza y adopción. | Tratar `ASK-DET-002`, UX-001/002, ENV-001 y GATE-001 como condición de calidad de la siguiente iteración. |
90
+ | Resolver primero el cache de flota | **Válida con matiz.** Es capacidad y coste operativo, no el “holy shit” comercial. | Añadir límites observables y eviction; no convertirlo en iniciativa principal hasta fijar el modelo de workspace/flota. |
91
+
92
+ ### Recomendación propia
93
+
94
+ La próxima demo debe ser un flujo completo de cambio, no un catálogo de comandos:
95
+
96
+ ```text
97
+ PR con cambio Spring -> pack gate -> findings file:line -> impacto transitivo
98
+ -> endpoints/posture -> decisión CI -> contexto compacto para remediación
99
+ ```
100
+
101
+ El entregable comercial debe responder tres preguntas en una página: **qué cambió, qué
102
+ riesgo nuevo introduce y qué queda explícitamente fuera del alcance**. El KPI principal no
103
+ debe ser el número de findings, sino el tiempo hasta una decisión defendible y la proporción
104
+ de resultados con unidad, población, evidencia y exclusión negativa.
105
+
106
+ ## Criterios de aceptación para próximas iteraciones
107
+
108
+ 1. Dos ejecuciones frío/caliente del mismo árbol producen el mismo `content_id`; cualquier diferencia de ejecución vive bajo `_meta` y se declara como tal.
109
+ 2. El bloque de inicio sólo recomienda comandos que pueden ejecutarse dentro del techo con la bandera que realmente los acota.
110
+ 3. Ningún hint propone un flag ya usado o semánticamente ineficaz; la batería cubre todas las combinaciones publicadas.
111
+ 4. Cada comando que anuncie `--ci` documenta su gate, exit code, base y comportamiento ante resultado parcial; los demás lo rechazan de forma explícita y coherente.
112
+ 5. Windows ejecuta la batería de envelope y no permite publicar `command=unknown` como éxito silencioso.
113
+ 6. Cada benchmark comercial incluye build, commit, tamaño de población, estado de caché, número de muestras y protocolo de aislamiento.
114
+ 7. La demo PR/migración genera evidencia de fuente, población, límites y exclusiones negativas; sin esos campos el resultado se marca no concluyente.
115
+
116
+ ## Estado documental
117
+
118
+ Este documento registra el informe externo y su evaluación independiente. El estado maestro
119
+ de cada fila continúa en [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md). Las diferencias entre wheel
120
+ auditado y checkout deben resolverse mediante reproducción contra el artefacto exacto, no
121
+ mediante una actualización manual del estado.
@@ -0,0 +1,173 @@
1
+ # ThingsBoard field audit findings — commercial value and product gaps
2
+
3
+ **Date:** 2026-08-23
4
+ **ASK:** 5.8.25 (`b6e0e0f157687a962ce66627afe2e9b388fb2f06`)
5
+ **Subject:** ThingsBoard, `181ac1392b9728d3e2aed9cd698a246bf1de3de7`
6
+ **Status:** five corrections implemented in the working tree; release/commit pending
7
+
8
+ ## Implementation status
9
+
10
+ | Finding | Implemented correction |
11
+ |---|---|
12
+ | `AUD-THB-001` | `impact-chain` now publishes `endpoint_disposition` / `negative_scope` with `in_scope`, `out_of_scope` and `unknown_scope`, using the shared disposition authority. |
13
+ | `AUD-THB-002` | `TX-006` now labels `material_proxy_bypass` versus `structural_proxy_bypass` in evidence. |
14
+ | `AUD-THB-003` | Security projections now publish `security_signal` while preserving `security_policy` for compatibility. |
15
+ | `AUD-THB-004` | `audit-report` now publishes and renders `evidence_bounds`. |
16
+ | `AUD-THB-005` | Migration output now separates legacy `headline_blocker` from `headline_action`. |
17
+
18
+ The focused contract battery passes. The full repository battery still has five unrelated
19
+ pre-existing failures in delegated-command cache reuse and RIS freshness/cold-start tests;
20
+ they are recorded separately and were not introduced by these changes.
21
+
22
+ ## Executive assessment
23
+
24
+ The external review is accepted: the audit is technically credible but does not yet
25
+ demonstrate enough business value. It proves that ASK can inventory, prioritize and produce
26
+ defensible hypotheses. It does not yet prove the strongest commercial promise: that a customer
27
+ can make a safer change faster because ASK narrows the affected scope and explains what is
28
+ outside it.
29
+
30
+ The next commercial proof should therefore be a **change case**, not another broad posture
31
+ report: one concrete modernization or refactor, its transitive impact, endpoint/security
32
+ intersection, explicit exclusions, and a before/after decision that would otherwise require
33
+ hours of manual work.
34
+
35
+ ## Findings from the field audit
36
+
37
+ ### AUD-THB-001 — Impact output has no explicit negative scope
38
+
39
+ **Severity:** P1 product gap
40
+ **Observed:** `impact` and `impact-chain` produced large positive cones (528–556 related
41
+ endpoints for several targets) but no explicit, evidence-backed `negative_scope` section.
42
+ `UserController` provided a useful control case with 0 direct callers and 31 endpoints, but
43
+ that is not equivalent to a systematic exclusion set.
44
+
45
+ **Customer impact:** the output can increase uncertainty rather than reduce it. A CTO cannot
46
+ quickly distinguish “affected”, “not reached by this model”, and “proven outside the change”.
47
+ Large counts are therefore commercially weak and easy to misread.
48
+
49
+ **Required correction:** publish, for every impact result:
50
+
51
+ - `in_scope` with the path and evidence basis;
52
+ - `out_of_scope` only when a graph boundary proves exclusion;
53
+ - `unknown_scope` for unresolved, dynamic or unsupported paths;
54
+ - counts and representative examples for all three;
55
+ - the exact boundary that prevents a node from entering the positive cone.
56
+
57
+ Never infer negative scope from absence in a truncated result list.
58
+
59
+ **Regression test:** a fixture with two independent controller/service branches must show one
60
+ branch in `in_scope`, the other in `out_of_scope`, and an unresolved reflective edge in
61
+ `unknown_scope`.
62
+
63
+ ### AUD-THB-002 — TX-006 overstates equivalent self-invocation cases
64
+
65
+ **Severity:** P1 precision defect
66
+ **Observed:** the Spring audit reported 18 defects, including many TX-006 findings where an
67
+ annotated method calls another annotated method internally but both use the default transaction
68
+ semantics. Manual review of `AssetProfileServiceImpl`, `DeviceServiceImpl` and
69
+ `DashboardServiceImpl` confirmed the proxy limitation, but did not demonstrate a changed
70
+ runtime contract.
71
+
72
+ **Customer impact:** inflated defect counts reduce trust and make the report look like a lint
73
+ dump. The `SqlPartitioningRepository#save` case is materially different because it declares
74
+ `Propagation.NOT_SUPPORTED`; the report must distinguish it from equivalent defaults.
75
+
76
+ **Required correction:** classify TX findings by semantic delta:
77
+
78
+ - `material_proxy_bypass`: propagation/isolation/rollback/timeout changes across the proxy;
79
+ - `structural_proxy_bypass`: annotation is bypassed but no changed contract is proven;
80
+ - `verified_runtime_effect`: integration evidence proves the behavior;
81
+ - `requires_validation`: static evidence is insufficient.
82
+
83
+ Only the first and third categories should contribute to a commercial “defect” count by
84
+ default. The second should be a review signal.
85
+
86
+ **Regression test:** fixtures must cover `NOT_SUPPORTED`, `REQUIRES_NEW`, custom rollback,
87
+ isolation and timeout versus two default `@Transactional` methods. The output must not assign
88
+ the same severity to semantically equivalent and materially different cases.
89
+
90
+ ### AUD-THB-003 — `none_detected` is too easy to read as public exposure
91
+
92
+ **Severity:** P1 communication/contract defect
93
+ **Observed:** the endpoint inventory reported 28 mappings as `none_detected`. Manual review
94
+ showed static resources, redirects, no-auth routes, device-token routes, readiness and error
95
+ handlers among the examples.
96
+
97
+ **Customer impact:** a non-specialist reader can interpret the metric as “28 unprotected
98
+ endpoints”, which would create a false security escalation.
99
+
100
+ **Required correction:** rename or qualify the state as `security_signal_not_inferred`, and
101
+ publish a mandatory explanation per route: recognized control, unsupported control model,
102
+ public-by-design, token-gated, static, health/readiness, or unresolved. A naked count must not
103
+ appear in the executive summary.
104
+
105
+ **Regression test:** endpoint fixtures covering `@PreAuthorize`, request-chain authorization,
106
+ device token, `/api/noauth`, static resources and unsupported servlet mappings must produce
107
+ distinct states.
108
+
109
+ ### AUD-THB-004 — Audit report does not carry evidence bounds consistently
110
+
111
+ **Severity:** P1 evidence-contract gap
112
+ **Observed:** component outputs exposed coverage gaps, while the generated `audit-report`
113
+ section declared evidence completeness without explicit bounds. The report therefore looks
114
+ more exhaustive than the underlying evidence supports.
115
+
116
+ **Customer impact:** a buyer cannot tell which claims are measured, inferred, unsupported or
117
+ profile-dependent without reading raw JSON.
118
+
119
+ **Required correction:** every report claim must carry an evidence envelope with:
120
+
121
+ - source component and schema version;
122
+ - repository commit and tree state;
123
+ - scope and unsupported surfaces;
124
+ - profile/configuration used;
125
+ - confidence and validation status;
126
+ - unresolved gaps and their commercial consequence.
127
+
128
+ The renderer must refuse “complete” language when any required bound is absent.
129
+
130
+ **Regression test:** build an assessment containing one known non-coverage gap and assert that
131
+ all Markdown, JSON and compact renderings expose it and cannot emit an unqualified complete
132
+ verdict.
133
+
134
+ ### AUD-THB-005 — Baseline summary mixes incompatible migration signals
135
+
136
+ **Severity:** P2 presentation defect
137
+ **Observed:** the assessment combined `readiness 94`, `headline blocker jakarta_migration`
138
+ and `migration blockers 0`.
139
+
140
+ **Customer impact:** the executive decision is ambiguous: a customer cannot tell whether a
141
+ blocker exists, whether the score is a readiness score or a risk score, or whether the issue is
142
+ actionable in the current Spring Boot 3 baseline.
143
+
144
+ **Required correction:** define separate fields and wording for `readiness_score`,
145
+ `blocking_findings`, `headline_action` and `non_applicable_dimensions`. Enforce the invariant
146
+ that zero blockers cannot render as “blocker” without the qualifier “non-blocking action”.
147
+
148
+ **Regression test:** cases with zero blockers, one blocker and a non-applicable migration
149
+ dimension must produce mutually unambiguous summaries in JSON, Markdown and compact output.
150
+
151
+ ## Bugs versus gaps
152
+
153
+ No runtime regression, crash, write leakage or checkout mutation was observed during this
154
+ field audit. The findings above are product defects or commercial gaps in precision, evidence
155
+ boundaries and decision presentation. They are not evidence that ThingsBoard itself is broken.
156
+
157
+ The strongest confirmed ASK defect is **TX-006 precision**, because static findings were
158
+ presented as defects despite equivalent default transaction semantics. The remaining rows are
159
+ contract or product-surface gaps that materially limit the sales value of the report.
160
+
161
+ ## Recommended commercial proof case
162
+
163
+ Build the next demo around a deliberately controlled change:
164
+
165
+ 1. choose one service or transaction boundary with a known interface/implementation split;
166
+ 2. show the baseline callers, endpoints and security controls;
167
+ 3. introduce a controlled change;
168
+ 4. show the exact positive scope, proven exclusions and unknowns;
169
+ 5. compare ASK output with a manually curated ground truth;
170
+ 6. quantify analyst time avoided and the decision enabled.
171
+
172
+ The acceptance bar is not “more findings”. It is **precision, explainability and a bounded
173
+ change decision**.
@@ -16,6 +16,75 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
16
16
 
17
17
  ## Current Synchronization
18
18
 
19
+ **Corpus ampliado recibido, 2026-08-23 — 17 hallazgos nuevos en intake.**
20
+ [`AUDIT-2026-08-23-CORPUS-AMPLIADO.md`](AUDIT-2026-08-23-CORPUS-AMPLIADO.md) registra cuatro
21
+ P0 (`AUD-CA-001`, `002`, `003`, `014`), ocho P1, cuatro P2 y un P3. La evidencia externa
22
+ aporta reproducción y contraste manual, pero estas filas permanecen **pendientes de
23
+ reproducción contra checkout/wheel**: no se declaran corregidas ni se atribuyen al código
24
+ auditado. La prioridad inmediata es seguridad no modelada, colisiones de FQN y superficie
25
+ HTTP Micronaut; después siguen contratos de inventario, cobertura y precisión de salida.
26
+
27
+ **Correcciones iniciadas, 2026-08-23.** `AUD-CA-001` (declaración segura de Shiro),
28
+ `AUD-CA-005` (autoridad de `src/main`), `AUD-CA-013` (sobrecargas y anclas de
29
+ `explain`) y `AUD-CA-017` (contador estructurado) están corregidos en commits atómicos
30
+ de `5.8.25`. `AUD-CA-014` tiene una corrección parcial: Micronaut ya aparece como
31
+ superficie detectada-no-modelada y cuantificada, pero el soporte HTTP sigue pendiente.
32
+ Los restantes hallazgos permanecen abiertos hasta reproducirlos y cubrirlos con pruebas.
33
+
34
+ **Estado autoritativo del repositorio, 2026-08-23 — `5.8.25`, `HEAD 3d56d11`.** Este
35
+ snapshot supersede cualquier estado de release indicado en las secciones históricas de
36
+ este ledger. La batería completa pasa en verde cuando se configuran ambos almacenes
37
+ temporales: `SOURCECODE_CONTEXT_CACHE_DIR` para CIR/parse y `SOURCECODE_CACHE_DIR` para
38
+ snapshots/RIS. Usar sólo el primer directorio produce falsos fallos de persistencia.
39
+
40
+ Los commits `125e486`, `735d766`, `434d0e2`, `cd3f8f1`, `e9f5861`, `49187f9` y `3d56d11` están incluidos
41
+ en el checkout actual. Cubren rutas
42
+ Windows, selftest con `ask.exe`, resolución bounded de comandos y flags, fallback de
43
+ contexto, rutas POSIX del workspace, salida estable del job Windows, fingerprint sin estado
44
+ runtime de caché, sweep final del parse cache, gate CI de migraciones, trazabilidad explícita
45
+ de benchmarks históricos y aislamiento de observabilidad por invocación. Por tanto,
46
+ `ASK-UX-001`, `ASK-UX-002` y `ASK-ENV-001` ya no deben describirse como fallos sin
47
+ corrección: quedan **pendientes de verificación contra el wheel publicado y de confirmación
48
+ en GitHub Windows**.
49
+
50
+ La cola abierta actual es: validación externa de `ASK-DET-002`, `B-26` y `ASK-GATE-001`,
51
+ regeneración reproducible de cifras `B-11`, `ASK-PERF-003` (medición aislada aún
52
+ necesaria), `B-13`/`B-14` (reconciliación contra artefacto exacto), y la deuda P3 de filas
53
+ sin cita y `B-30`. No quedan fallos locales reproducidos pendientes en esta batería.
54
+
55
+ Las menciones posteriores a `5.8.24`, “release/commit pending” o “no audit, no release”
56
+ son fotografías históricas de sus respectivas iteraciones. Se mantienen para trazabilidad,
57
+ pero no representan el estado vigente ni deben usarse para decidir el siguiente release.
58
+
59
+ **External `5.8.25` regression audit received, 2026-08-23 — triage recorded.**
60
+ [`AUDIT-2026-08-23-EXTERNAL-5.8.25.md`](AUDIT-2026-08-23-EXTERNAL-5.8.25.md) separates the
61
+ Windows/MSAS wheel evidence from this checkout. The only new confirmed product defect is
62
+ `ASK-DET-002`: root `content_id` changes between cold and warm runs because `_cache` runtime
63
+ state is included in the answer fingerprint. `ASK-UX-001`/`ASK-UX-002` and
64
+ `ASK-GATE-001` remain actionable contract residues in the audited artefact; `ASK-ENV-001`
65
+ is a Windows-specific witness still requiring reproduction. `B-26` is recorded as a fleet
66
+ capacity issue (559.48 MB against 512 MB), not as a finding-analysis error. The reported
67
+ performance deltas are not accepted as regressions until isolated measurements control cache
68
+ state and concurrency. `B-13`/`B-14` require reconciliation against the exact wheel and
69
+ repository pair because the source re-audit disagrees with the external field result.
70
+
71
+ The validated commercial queue is now: deterministic/provenance envelope, bounded UX and
72
+ hint correctness, coherent CI gates, Windows envelope verification, then PR semantic gate,
73
+ bounded agent context, Java/Spring migration inventory, HTTP exposure provenance and SARIF
74
+ enrichment. The complete CTO assessment and acceptance criteria are in the linked audit;
75
+ they are not a claim that every auditor suggestion is a next-iteration fix.
76
+
77
+ **ThingsBoard field audit, 2026-08-23 — five findings documented and corrected in the
78
+ working tree; included in `5.8.25` and commit `2c551db`.**
79
+ [`AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md`](AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md)
80
+ records the evidence and acceptance tests for the missing negative scope (`AUD-THB-001`),
81
+ TX-006 precision (`AUD-THB-002`), ambiguous `none_detected` exposure semantics
82
+ (`AUD-THB-003`), incomplete evidence bounds in the generated report (`AUD-THB-004`) and
83
+ contradictory migration summary wording (`AUD-THB-005`). The audit found no runtime
84
+ regression, crash, write leakage or mutation of the audited checkout. The five authorities
85
+ and focused regression tests were updated and released; these rows are product gaps/defects, not
86
+ claims that ThingsBoard itself is broken.
87
+
19
88
  **`AUD-601` queue closed, 2026-08-23 — seven rows, one commit each, no release.** Six closed
20
89
  and one (`AUD-601-X01`) held with the half it was owed. Suite **12 702 / 0 red**,
21
90
  `__version__` unchanged at `5.8.24`. ⚠ **Three more reported mechanisms are corrected by the
@@ -523,7 +523,7 @@ moves ahead of everything except `S-23`.
523
523
  | # | Row | Mechanism | Done when |
524
524
  |---|---|---|---|
525
525
  | `S-27` | **The licence axis cannot charge the buyer the product is being built for** ⭐ — `P-13` | `is_large_repo()` counts Java files **per repository path** against `_FREE_REPO_JAVA_FILE_LIMIT = 500` (`license.py:121`, `:521`), and the only other axis is the `delta` automation quota (`:267`). An organisation of 40 microservices at 300 Java files each crosses no threshold on any repository and **pays nothing**. That is precisely the buyer the third memo identifies correctly — flota, defendibilidad, *"how many unauthenticated routes does my organisation have"* — so the product's own price model excludes it. This is not a pricing preference: it is a measured contradiction between the gate in `license.py` and the route in `PRODUCT-ROUTE.md` | An axis that can charge an organisation — repository count, or a fleet manifest, or seats over a workspace — declared in `license.entitlement()` with `when_it_changes` saying what it costs, exactly as `P-2` established for the existing axis. **Not** by lowering the per-repo threshold, which would start charging the users the current rule deliberately leaves free. Acceptance: a fixture workspace of N small repositories reaches the same entitlement decision as one large repository of the same total size, or the difference is published as a stated product decision rather than an accident of the counter |
526
- | `S-28` | **SARIF out — the findings reach the tab the developer already reads** | The schema is already in the house: `sarif.py` parses SARIF 2.1.0 for `enrich`, with severity mapping, location resolution and an `unresolved` list that names why a result could not be placed. Nothing emits it. The memo is right that this is the cheapest conversion in the backlog and wrong that SARIF is *"a format"*: it is the channel into GitHub's Security tab, so the buyer installs nothing and learns no commands | `--format sarif` on the commands whose answer is a finding population, emitting **only claims ASK owns** an unguarded route, a contract violation, a reachability verdict. A result that arrived through `enrich` stays attributed to the tool that found it and is never re-emitted as ASK's own: the enrichment is the reachability, not the detection (`NC-001`, `NC-002`). Round-trip assertion: emit, re-parse with `sarif.parse_sarif`, and the population and its `non_coverage` survive |
526
+ | `S-28` | **SARIF out — the findings reach the tab the developer already reads** **first safe increment in `17fe1ca`**: `ask pack gate --format sarif` emits SARIF 2.1.0 decision diagnostics from the gate manifest only. A BLOCK/UNVERIFIED component becomes a locationless result with its component, status and exit code; a PASS emits nothing. This is deliberately narrower than an audit-finding export: no source location is invented and no component payload is re-emitted. | The schema was already in the house: `sarif.py` parses SARIF 2.1.0 for `enrich`, with severity mapping, location resolution and an `unresolved` list that names why a result could not be placed. The implemented gate channel reaches CI without presenting imported findings as ASK discoveries. **Remaining:** source-level exports for commands that own a finding population, with a round-trip assertion over their locations and non-coverage. A result that arrived through `enrich` stays attributed to the tool that found it and is never re-emitted as ASK's own: the enrichment is the reachability, not the detection (`NC-001`, `NC-002`). |
527
527
  | `S-29` | **The remediation record becomes a public, generated page** | Twenty rows closed and field-verified in twenty-four hours, a mechanism in source per row, two rejected with their measurement and their price. It lives in `docs/DEFECT-LEDGER.md`, which is shipped inside the wheel and nowhere else. The commercial argument is exact and is the memo's best: the first objection to a single-maintainer proprietary product is *"what if it disappears"*, and the hardest answer is not an SLA promise but the product's own numbers | A **generated projection**, never the raw file — `P-14`: rows open and closed per version, median days to closure, declined rows with their reason, derived from the ledger plus `build_commit` so it cannot drift from what shipped. Redaction is part of the acceptance criterion, not a follow-up: no absolute maintainer paths, no third-party evaluation subjects named as audited. Assertion over the generator, not over the output |
528
528
  | `S-30` | **The token bill becomes a measured number, and `--since` carries the budget** | Two halves of one thesis the memo states correctly: the customer's real cost is the agent's context bill, not the licence. The stateful half it proposes (a session that remembers what the agent was given) is **refused** — it makes the answer depend on what the agent claims it saw, which breaks the determinism this product sells. The stateless half is already almost built: `--since`, `delta`, `regress`, content-addressed answers and the declared `--compact` / `--agent` ceilings | (a) `--since <ref>` composed with a token budget on the existing bounded views, so an agent supplies the sha it holds and gets only what changed inside a stated ceiling, with `non_coverage` for what the budget cut. (b) A reproducible harness in the repository that runs one real agent task with and without ASK and publishes tokens per resolved task — under the honest-benchmark rule: what did **not** work is reported first, and no figure is published that a reader cannot re-run |
529
529
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.8.25"
7
+ version = "5.8.26"
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"
@@ -21,7 +21,6 @@ from __future__ import annotations
21
21
  import argparse
22
22
  import json
23
23
  import os
24
- import resource
25
24
  import shutil
26
25
  import subprocess
27
26
  import sys
@@ -29,6 +28,11 @@ import tempfile
29
28
  import time
30
29
  from pathlib import Path
31
30
 
31
+ try:
32
+ import resource
33
+ except ImportError: # Windows has no POSIX resource module.
34
+ resource = None # type: ignore[assignment]
35
+
32
36
  # Import the frozen collector from the package under test.
33
37
  sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src"))
34
38
  from sourcecode import __version__ as TOOL_VERSION # noqa: E402
@@ -154,7 +158,10 @@ def run_once(argv: list[str], env: dict[str, str], perf_log: Path) -> tuple[floa
154
158
  """
155
159
  if perf_log.exists():
156
160
  perf_log.unlink()
157
- rss_before = resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
161
+ rss_before = (
162
+ resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
163
+ if resource is not None else 0
164
+ )
158
165
  t0 = time.perf_counter()
159
166
  proc = subprocess.run(argv, env=env, capture_output=True, timeout=1800)
160
167
  wall_ms = (time.perf_counter() - t0) * 1000.0
@@ -163,7 +170,10 @@ def run_once(argv: list[str], env: dict[str, str], perf_log: Path) -> tuple[floa
163
170
  raise HarnessRunFailed(
164
171
  f"exit {proc.returncode} from `{' '.join(argv)}`: {detail or 'no stderr'}"
165
172
  )
166
- rss_after = resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
173
+ rss_after = (
174
+ resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
175
+ if resource is not None else 0
176
+ )
167
177
  # ru_maxrss for RUSAGE_CHILDREN is the peak among reaped children; the delta
168
178
  # approximates this run's peak. Approximate by construction — documented.
169
179
  rss_bytes = max(rss_after - rss_before, rss_after) * RSS_UNIT if rss_after else 0.0
@@ -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.25"
7
+ __version__ = "5.8.26"