sourcecode 5.8.12__tar.gz → 5.8.14__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 (385) hide show
  1. {sourcecode-5.8.12 → sourcecode-5.8.14}/CHANGELOG.md +38 -0
  2. {sourcecode-5.8.12 → sourcecode-5.8.14}/PKG-INFO +9 -11
  3. {sourcecode-5.8.12 → sourcecode-5.8.14}/README.md +8 -10
  4. {sourcecode-5.8.12 → sourcecode-5.8.14}/SECURITY.md +3 -1
  5. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/DEFECT-LEDGER.md +37 -11
  6. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/DEVELOPMENT-ROADMAP.md +36 -20
  7. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/EXECUTIVE-ROADMAP.md +54 -13
  8. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/MANUAL-USUARIO.md +6 -3
  9. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/USER_GUIDE.md +3 -3
  10. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/privacy.md +19 -16
  11. {sourcecode-5.8.12 → sourcecode-5.8.14}/pyproject.toml +1 -1
  12. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/__init__.py +1 -1
  13. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/change_plan.py +8 -1
  14. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/cli.py +118 -64
  15. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/compare.py +7 -1
  16. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/execution_plan.py +19 -0
  17. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/runner.py +6 -1
  18. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/server.py +3 -4
  19. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/migrate_check.py +16 -7
  20. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/posture.py +52 -9
  21. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/readonly.py +32 -8
  22. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/release_info.py +1 -1
  23. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/rename_refactor.py +14 -4
  24. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/repository_ir.py +42 -14
  25. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/steps_impact.py +1 -1
  26. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/risk.py +13 -0
  27. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schema.py +6 -3
  28. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/security_posture.py +9 -1
  29. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/selftest.py +46 -7
  30. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/serializer.py +13 -4
  31. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_model.py +13 -0
  32. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/summarizer.py +54 -12
  33. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/telemetry/__init__.py +5 -4
  34. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/telemetry/config.py +14 -19
  35. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/telemetry/consent.py +11 -15
  36. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/telemetry/events.py +3 -1
  37. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/telemetry/filters.py +10 -0
  38. {sourcecode-5.8.12 → sourcecode-5.8.14}/supabase/functions/README.md +4 -2
  39. sourcecode-5.8.14/supabase/functions/telemetry/index.ts +127 -0
  40. {sourcecode-5.8.12 → sourcecode-5.8.14}/supabase/sql/telemetry_events.sql +36 -1
  41. sourcecode-5.8.12/supabase/functions/telemetry/index.ts +0 -72
  42. {sourcecode-5.8.12 → sourcecode-5.8.14}/.github/workflows/build-windows.yml +0 -0
  43. {sourcecode-5.8.12 → sourcecode-5.8.14}/.github/workflows/perf-gate.yml +0 -0
  44. {sourcecode-5.8.12 → sourcecode-5.8.14}/.gitignore +0 -0
  45. {sourcecode-5.8.12 → sourcecode-5.8.14}/.ruff.toml +0 -0
  46. {sourcecode-5.8.12 → sourcecode-5.8.14}/CLAUDE.md +0 -0
  47. {sourcecode-5.8.12 → sourcecode-5.8.14}/CONTRIBUTING.md +0 -0
  48. {sourcecode-5.8.12 → sourcecode-5.8.14}/LICENSE +0 -0
  49. {sourcecode-5.8.12 → sourcecode-5.8.14}/NOTICE +0 -0
  50. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/CACHE.md +0 -0
  51. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/COMMERCIAL-OFFER.md +0 -0
  52. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/CUSTOMER-VALIDATION.md +0 -0
  53. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/DEMO-5MIN.md +0 -0
  54. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/EXECUTION-PLAN-12MO.md +0 -0
  55. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/MODERNIZATION.md +0 -0
  56. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/PRODUCT_AUDIT.md +0 -0
  57. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/PRODUCT_IDENTITY.md +0 -0
  58. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/PRODUCT_TIERS.md +0 -0
  59. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/RC1-CHECKLIST.md +0 -0
  60. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/RELEASE-CHECKLIST.md +0 -0
  61. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  62. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  63. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  64. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  65. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  66. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  67. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  68. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  69. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  70. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  71. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  72. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  73. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  74. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  75. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  76. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  77. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  78. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  79. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  80. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0006-performance-harness.md +0 -0
  81. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  82. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  83. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/consumer-disposition-inventory.md +0 -0
  84. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/overview.md +0 -0
  85. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/product-architecture-review.md +0 -0
  86. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/product-strategy-layering.md +0 -0
  87. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  88. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/architecture/semantic-ir-roadmap.md +0 -0
  89. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/baseline-ci.yml +0 -0
  90. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/commercial-pipeline-audit.md +0 -0
  91. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/contracts-ci.yml +0 -0
  92. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/contracts.md +0 -0
  93. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  94. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  95. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  96. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  97. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  98. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  99. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  100. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  101. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/licensing-schema.md +0 -0
  102. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/migrate-check.md +0 -0
  103. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/README.md +0 -0
  104. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/REGRESSION-GATE.md +0 -0
  105. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  106. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  107. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  108. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  109. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  110. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  111. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  112. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  113. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  114. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  115. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  116. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  117. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  118. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  119. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  120. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  121. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  122. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  123. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  124. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  125. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  126. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  127. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  128. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  129. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  130. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  131. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  132. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  133. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  134. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  135. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  136. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  137. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  138. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  139. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  140. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  141. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  142. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  143. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  144. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  145. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  146. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  147. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/gate-latest/README.md +0 -0
  148. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  149. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  150. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  151. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  152. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  153. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  154. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/perf/baselines/reference-best/README.md +0 -0
  155. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/posture.md +0 -0
  156. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/pro-experience-audit.md +0 -0
  157. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/schema.md +0 -0
  158. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/spec/envelope-v1.md +0 -0
  159. {sourcecode-5.8.12 → sourcecode-5.8.14}/docs/spring-audit-ci.yml +0 -0
  160. {sourcecode-5.8.12 → sourcecode-5.8.14}/scripts/compare_integration_engines.py +0 -0
  161. {sourcecode-5.8.12 → sourcecode-5.8.14}/scripts/customer_smoke_test.sh +0 -0
  162. {sourcecode-5.8.12 → sourcecode-5.8.14}/scripts/generate_jdk_exports.py +0 -0
  163. {sourcecode-5.8.12 → sourcecode-5.8.14}/scripts/perf_gate.py +0 -0
  164. {sourcecode-5.8.12 → sourcecode-5.8.14}/scripts/perf_harness.py +0 -0
  165. {sourcecode-5.8.12 → sourcecode-5.8.14}/scripts/sync_gate_anchors.py +0 -0
  166. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/adaptive_scanner.py +0 -0
  167. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/answer_bounds.py +0 -0
  168. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/archetype.py +0 -0
  169. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/architectural_baseline.py +0 -0
  170. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/architectural_delta.py +0 -0
  171. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/architecture_analyzer.py +0 -0
  172. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/architecture_summary.py +0 -0
  173. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/ast_extractor.py +0 -0
  174. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/audit_clusters.py +0 -0
  175. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/audit_recipe.py +0 -0
  176. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/audit_report.py +0 -0
  177. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/audit_since.py +0 -0
  178. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/baseline_autocapture.py +0 -0
  179. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/breaking_changes.py +0 -0
  180. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/build_modules.py +0 -0
  181. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/bundled_docs.py +0 -0
  182. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/cache.py +0 -0
  183. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/cache_model.py +0 -0
  184. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/call_surface.py +0 -0
  185. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/caller_metrics.py +0 -0
  186. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/caller_reach.py +0 -0
  187. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/canonical_ir.py +0 -0
  188. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/chain_rules.py +0 -0
  189. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/cir_graphs.py +0 -0
  190. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/classifier.py +0 -0
  191. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/client_calls.py +0 -0
  192. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/code_notes_analyzer.py +0 -0
  193. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/confidence_analyzer.py +0 -0
  194. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/constraint_diff.py +0 -0
  195. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/consumer_join.py +0 -0
  196. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/container_wiring.py +0 -0
  197. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/context_cache.py +0 -0
  198. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/context_graph.py +0 -0
  199. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/context_scorer.py +0 -0
  200. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/context_summarizer.py +0 -0
  201. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/contract_diff.py +0 -0
  202. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/contract_init.py +0 -0
  203. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/contract_model.py +0 -0
  204. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/contract_pipeline.py +0 -0
  205. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/coverage_parser.py +0 -0
  206. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/data_exposure.py +0 -0
  207. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/data_labels.py +0 -0
  208. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/declarations.py +0 -0
  209. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/defect_identity.py +0 -0
  210. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/degradation.py +0 -0
  211. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/dependency_analyzer.py +0 -0
  212. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/deployment_prefix.py +0 -0
  213. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detach.py +0 -0
  214. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/__init__.py +0 -0
  215. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/base.py +0 -0
  216. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/csproj_parser.py +0 -0
  217. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/dart.py +0 -0
  218. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/dotnet.py +0 -0
  219. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/elixir.py +0 -0
  220. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/go.py +0 -0
  221. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/heuristic.py +0 -0
  222. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/hybrid.py +0 -0
  223. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/java.py +0 -0
  224. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/jvm_ext.py +0 -0
  225. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/nodejs.py +0 -0
  226. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/parsers.py +0 -0
  227. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/php.py +0 -0
  228. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/project.py +0 -0
  229. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/python.py +0 -0
  230. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/ruby.py +0 -0
  231. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/rust.py +0 -0
  232. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/systems.py +0 -0
  233. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/terraform.py +0 -0
  234. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/detectors/tooling.py +0 -0
  235. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/doc_analyzer.py +0 -0
  236. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/dynamic_argument_surface.py +0 -0
  237. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/empty_reach.py +0 -0
  238. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/endpoint_disposition.py +0 -0
  239. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/endpoint_literals.py +0 -0
  240. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/endpoint_metrics.py +0 -0
  241. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/entrypoint_classifier.py +0 -0
  242. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/env_analyzer.py +0 -0
  243. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/envelope.py +0 -0
  244. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/environment_resolution.py +0 -0
  245. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/error_schema.py +0 -0
  246. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/evidence_provider.py +0 -0
  247. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/explain.py +0 -0
  248. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/explain_endpoint.py +0 -0
  249. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/facts/__init__.py +0 -0
  250. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/facts/registry.json +0 -0
  251. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/field_deprecations.py +0 -0
  252. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/file_chunker.py +0 -0
  253. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/file_classifier.py +0 -0
  254. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/filter_surface.py +0 -0
  255. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/format_contract.py +0 -0
  256. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/fqn_utils.py +0 -0
  257. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/functional_routes.py +0 -0
  258. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/gate_anchors.py +0 -0
  259. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/git_analyzer.py +0 -0
  260. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/git_checkout.py +0 -0
  261. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/graph_analyzer.py +0 -0
  262. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/graph_evidence.py +0 -0
  263. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/hibernate_strat.py +0 -0
  264. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/identity_fallback.py +0 -0
  265. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/integration_coordinates.py +0 -0
  266. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/jdk_exports.py +0 -0
  267. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/license.py +0 -0
  268. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/manifest_cache.py +0 -0
  269. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/__init__.py +0 -0
  270. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/dependency_import.py +0 -0
  271. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  272. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  273. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  274. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  275. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  276. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/orchestrator.py +0 -0
  277. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp/registry.py +0 -0
  278. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/mcp_nudge.py +0 -0
  279. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/metrics_analyzer.py +0 -0
  280. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/migration_blast.py +0 -0
  281. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/non_coverage.py +0 -0
  282. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/openapi_surface.py +0 -0
  283. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/openrewrite_recipe.py +0 -0
  284. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/output_bounds.py +0 -0
  285. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/output_budget.py +0 -0
  286. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/output_ceiling.py +0 -0
  287. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/output_encoding.py +0 -0
  288. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/output_sink.py +0 -0
  289. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/parallel.py +0 -0
  290. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/parse_cache.py +0 -0
  291. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/partial_contract.py +0 -0
  292. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/path_admission.py +0 -0
  293. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/path_filters.py +0 -0
  294. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/perf.py +0 -0
  295. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/phased_run.py +0 -0
  296. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/pipe_contract.py +0 -0
  297. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/pr_comment_renderer.py +0 -0
  298. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/pr_impact.py +0 -0
  299. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/prepare_context.py +0 -0
  300. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/product_info.py +0 -0
  301. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/progress.py +0 -0
  302. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/provenance.py +0 -0
  303. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/ranking_engine.py +0 -0
  304. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/readiness_timeline.py +0 -0
  305. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/reconciliation.py +0 -0
  306. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/redactor.py +0 -0
  307. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/reference_facts.py +0 -0
  308. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/regress.py +0 -0
  309. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/relevance_scorer.py +0 -0
  310. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/remediation_diff.py +0 -0
  311. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/remedies.py +0 -0
  312. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/repo_classifier.py +0 -0
  313. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/__init__.py +0 -0
  314. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/context.py +0 -0
  315. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/errors.py +0 -0
  316. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/executor.py +0 -0
  317. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/planner.py +0 -0
  318. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/query.py +0 -0
  319. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/request.py +0 -0
  320. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/resolution.py +0 -0
  321. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/result.py +0 -0
  322. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/retriever.py +0 -0
  323. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/runtime.py +0 -0
  324. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/steps.py +0 -0
  325. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  326. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/steps_graph.py +0 -0
  327. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/steps_intf.py +0 -0
  328. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/steps_struct.py +0 -0
  329. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  330. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/ris.py +0 -0
  331. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/risk_model.py +0 -0
  332. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/rule_catalog.py +0 -0
  333. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/rule_pass.py +0 -0
  334. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/runs.py +0 -0
  335. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/runtime_classifier.py +0 -0
  336. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/sarif.py +0 -0
  337. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/scanner.py +0 -0
  338. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schema_producers.py +0 -0
  339. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schema_registry.py +0 -0
  340. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
  341. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
  342. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  343. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
  344. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
  345. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
  346. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/security_chain.py +0 -0
  347. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/security_config.py +0 -0
  348. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/security_config_scan.py +0 -0
  349. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/semantic_analyzer.py +0 -0
  350. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/semantic_impact_engine.py +0 -0
  351. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/semantic_integration_engine.py +0 -0
  352. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/semantic_services.py +0 -0
  353. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/servlet_surface.py +0 -0
  354. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/source_text.py +0 -0
  355. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_event_topology.py +0 -0
  356. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_findings.py +0 -0
  357. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_impact.py +0 -0
  358. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_profiles.py +0 -0
  359. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_properties.py +0 -0
  360. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_security_audit.py +0 -0
  361. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_semantic.py +0 -0
  362. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/spring_tx_analyzer.py +0 -0
  363. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/sql_taint.py +0 -0
  364. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/target_admission.py +0 -0
  365. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/telemetry/transport.py +0 -0
  366. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/test_gap_ranking.py +0 -0
  367. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/test_sources.py +0 -0
  368. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/text_input.py +0 -0
  369. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/timeline.py +0 -0
  370. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/timeline_cache.py +0 -0
  371. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/token_estimate.py +0 -0
  372. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/tree_utils.py +0 -0
  373. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/type_usage_surface.py +0 -0
  374. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/validation_inference.py +0 -0
  375. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/validation_surface.py +0 -0
  376. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/verify_edit.py +0 -0
  377. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/verify_repo.py +0 -0
  378. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/verify_rules.py +0 -0
  379. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/version_check.py +0 -0
  380. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/waivers.py +0 -0
  381. {sourcecode-5.8.12 → sourcecode-5.8.14}/src/sourcecode/workspace.py +0 -0
  382. {sourcecode-5.8.12 → sourcecode-5.8.14}/supabase/functions/get-license/index.ts +0 -0
  383. {sourcecode-5.8.12 → sourcecode-5.8.14}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  384. {sourcecode-5.8.12 → sourcecode-5.8.14}/supabase/sql/license_event_ordering.sql +0 -0
  385. {sourcecode-5.8.12 → sourcecode-5.8.14}/supabase/sql/licensing_schema.sql +0 -0
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.8.14] — 2026-08-20
4
+
5
+ *Fourth-audit remediation release. The external `5.8.13` audit subject remains
6
+ the evidence for outstanding field reproduction and performance work.*
7
+
8
+ ### Fixed
9
+ - ASK-09 selftest now reads typed error documents from either stdout or stderr
10
+ and clears inherited execution controls that would change the ceiling probe.
11
+ - Migration readiness names only dimensions that actually participate in its
12
+ aggregate, so an EclipseLink repository does not describe an excluded Hibernate
13
+ axis as an input.
14
+ - `impact` separates directly resolved targets from expanded analysis seeds and
15
+ implementation classes. `plan` and `compare` retain the expanded cone while
16
+ publishing container-wired components in their checklist and cost dimensions.
17
+
18
+ ### Changed
19
+ - `risk` now publishes its composition working set: source files, audit findings,
20
+ candidate defects and composed defects. This instruments the rare field-scale
21
+ zero-output report without claiming it is closed before reproduction.
22
+ - The roadmap and defect ledger distinguish these shipped changes from the two
23
+ remaining field-gated items: `risk` output reproduction and controlled
24
+ `data-exposure --config` performance measurement.
25
+
26
+ ## [5.8.13] — 2026-08-20
27
+
28
+ *MCP reliability release after deep multi-repository stress testing.*
29
+
30
+ ### Fixed
31
+ - Concurrent MCP tool calls can no longer leak one invocation's CLI JSON to the
32
+ MCP host process. The in-process `CliRunner` invocation is serialized because
33
+ its stdout/stderr capture is process-global; each caller now receives only its
34
+ own response envelope.
35
+
36
+ ### Verified
37
+ - The MCP regression suite passes, including a concurrent-runner regression and
38
+ live concurrent calls to `endpoints`, `validation` and `version` against the
39
+ testing corpus.
40
+
3
41
  ## [5.8.12] — 2026-08-19
4
42
 
5
43
  *Performance-mitigation and release-hygiene update. The external cross-version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.8.12
3
+ Version: 5.8.14
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
@@ -49,7 +49,7 @@ Description-Content-Type: text/markdown
49
49
 
50
50
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
51
51
 
52
- ![Version](https://img.shields.io/badge/version-5.8.12-blue)
52
+ ![Version](https://img.shields.io/badge/version-5.8.14-blue)
53
53
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
54
54
 
55
55
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -151,7 +151,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
151
151
  # pip / pipx
152
152
  pipx install sourcecode # or: pip install sourcecode
153
153
 
154
- ask version # ask 5.8.12 — and, on a build that has aged,
154
+ ask version # ask 5.8.14 — and, on a build that has aged,
155
155
  # how many releases have probably shipped since
156
156
  ```
157
157
 
@@ -580,18 +580,16 @@ ask config # version, config file path, telemetry status
580
580
  ask config /repo # + the repository's own sourcecode.config.json:
581
581
  # data labels, custom security annotations,
582
582
  # and any declaration that could not be used
583
- ask telemetry enable # anonymous telemetry is OFF by default (opt-in)
583
+ ask telemetry enable # ensure anonymous telemetry is enabled
584
584
  ```
585
585
 
586
- **Nothing is collected or transmitted unless you turn telemetry on** not on the first run,
587
- not in CI. If you do opt in, it collects version, OS, commands, flags, duration, repo-size
588
- range, and errors: **no source code, paths, secrets, or output**. Turn it off again with
586
+ **Anonymous telemetry is ON by default**. It collects version, OS, commands, flags, duration,
587
+ repo-size range, and errors: **no source code, paths, secrets, or output**. Turn it off with
589
588
  `ask telemetry disable`, `export SOURCECODE_TELEMETRY=0`, or `DO_NOT_TRACK=1`.
590
589
 
591
- > **Auditing someone else's code — regulated, client-owned or public-sector?** Nothing to do.
592
- > Telemetry was opt-out until 3.3.0; it is opt-in now (`docs/DEFECT-LEDGER.md` P-1), because a
593
- > default you must remember to disable is the wrong default for third-party code. An explicit
594
- > choice you made before is unchanged.
590
+ > **Auditing someone else's code — regulated, client-owned or public-sector?** Set
591
+ > `SOURCECODE_TELEMETRY=0` before the run. The setting is explicit, local and honored before
592
+ > any event is sent.
595
593
 
596
594
  **A question is not a write — `--no-write` / `ASK_READONLY=1`.** One contract over
597
595
  every command: nothing is created inside the analysed repository, and a command
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
6
6
 
7
- ![Version](https://img.shields.io/badge/version-5.8.12-blue)
7
+ ![Version](https://img.shields.io/badge/version-5.8.14-blue)
8
8
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
9
9
 
10
10
  Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
@@ -106,7 +106,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
106
106
  # pip / pipx
107
107
  pipx install sourcecode # or: pip install sourcecode
108
108
 
109
- ask version # ask 5.8.12 — and, on a build that has aged,
109
+ ask version # ask 5.8.14 — and, on a build that has aged,
110
110
  # how many releases have probably shipped since
111
111
  ```
112
112
 
@@ -535,18 +535,16 @@ ask config # version, config file path, telemetry status
535
535
  ask config /repo # + the repository's own sourcecode.config.json:
536
536
  # data labels, custom security annotations,
537
537
  # and any declaration that could not be used
538
- ask telemetry enable # anonymous telemetry is OFF by default (opt-in)
538
+ ask telemetry enable # ensure anonymous telemetry is enabled
539
539
  ```
540
540
 
541
- **Nothing is collected or transmitted unless you turn telemetry on** not on the first run,
542
- not in CI. If you do opt in, it collects version, OS, commands, flags, duration, repo-size
543
- range, and errors: **no source code, paths, secrets, or output**. Turn it off again with
541
+ **Anonymous telemetry is ON by default**. It collects version, OS, commands, flags, duration,
542
+ repo-size range, and errors: **no source code, paths, secrets, or output**. Turn it off with
544
543
  `ask telemetry disable`, `export SOURCECODE_TELEMETRY=0`, or `DO_NOT_TRACK=1`.
545
544
 
546
- > **Auditing someone else's code — regulated, client-owned or public-sector?** Nothing to do.
547
- > Telemetry was opt-out until 3.3.0; it is opt-in now (`docs/DEFECT-LEDGER.md` P-1), because a
548
- > default you must remember to disable is the wrong default for third-party code. An explicit
549
- > choice you made before is unchanged.
545
+ > **Auditing someone else's code — regulated, client-owned or public-sector?** Set
546
+ > `SOURCECODE_TELEMETRY=0` before the run. The setting is explicit, local and honored before
547
+ > any event is sent.
550
548
 
551
549
  **A question is not a write — `--no-write` / `ASK_READONLY=1`.** One contract over
552
550
  every command: nothing is created inside the analysed repository, and a command
@@ -91,4 +91,6 @@ Third-party dependencies (`typer`, `ruamel.yaml`, etc.) could contain vulnerabil
91
91
 
92
92
  ## Telemetry and privacy
93
93
 
94
- Telemetry is **opt-in only** and disabled by default. If enabled, only anonymous usage metadata is collected — never code, paths, or content. See [docs/privacy.md](docs/privacy.md).
94
+ Telemetry is **enabled by default** and can be disabled with `ask telemetry disable`,
95
+ `SOURCECODE_TELEMETRY=0`, or `DO_NOT_TRACK=1`. Only bounded anonymous usage metadata is
96
+ collected — never code, paths, or content. See [docs/privacy.md](docs/privacy.md).
@@ -16,23 +16,49 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
16
16
 
17
17
  ## Current Synchronization
18
18
 
19
- **As of 2026-08-19, the external `5.8.11` re-audit:** this is the current status of
20
- the 5.8.8/5.8.9 audit queue. The subject remained `saint-server` at `3dde0376`, with a
21
- byte-identical CIR and the same 53/61 invocables exercised. The score is **78/100**
22
- (75 in 5.8.8, 80 in 5.8.9). The observations below remain historical evidence; only
23
- this table declares present state.
19
+ **As of 2026-08-20, release `5.8.14` and the fourth external re-audit:** the audited
20
+ snapshot remains `3dde0376`; the report compares the four audit rounds and scores this one
21
+ **90/100** (75, 80, 78, 90). It exercised 53/61 invocables (87%), ran no application and
22
+ left the repository unchanged. Its 40+ longitudinal functional anchors are unchanged, so
23
+ there is no reported product regression. The `5.8.14` release ships the implementations
24
+ recorded below; they remain distinguished from facts verified on the `5.8.13` subject.
25
+ Only this table declares present state.
26
+
27
+ **Release status:** entries marked “pending `5.8.14`” in their historical wording are
28
+ shipped in `5.8.14`; a re-audit is still required wherever the row says so.
24
29
 
25
30
  | Rows | Current status | Evidence |
26
31
  |---|---|---|
27
- | `AUD-588-B01`, `AUD-589-B01`, `C3-122` | **implemented in 5.8.12** | `9884488` requires `risk` and `audit-report` to deliver stdout or their requested artifact before exit 0; the remaining closure evidence is a field-scale subprocess reproduction. |
32
+ | `AUD-588-B01` / `AUD-589-B01`, `C3-122` | **open, P0 for `risk`; `audit-report` corrected** | `9884488` corrected `audit-report` to refuse with typed `OUTPUT_TOO_LARGE` and produce its requested artifact. `risk` nevertheless exited 0 twice on the first shared-cache invocations with 0 bytes and no `-o` file, then succeeded seven times. `5cfa9ba` now publishes the source, audit-finding, candidate-defect and composed-defect working set, including partial answers. Repeat the real entry-point protocol before closure. |
28
33
  | `AUD-511-R01` / `AUD-588-B03` | **implemented in 5.8.12** | `13362ec` makes SEC-009 read comment-blanked Java, so a Javadoc profile cannot override the live `@Profile("!m3")` declaration. |
29
34
  | `AUD-588-B04` | **retracted audit premise** | `data-exposure` correctly preserves `chain_decision`; the reported `coverage_unknown` routes were custom-gate annotations whose application was not configured. `fd34eb1` remains a valid additive disclosure, but no further B04 fix is due. |
30
35
  | `AUD-588-B05` | **closed** | `c15f5b6`; changed container-wired components block a false `unaffected` disposition. |
31
- | `AUD-511-R03` / `AUD-588-B07` | **implemented in 5.8.12** | `47aee1e` gives the published `OUTPUT_TOO_LARGE` envelope precedence over an inconsistent process status and preserves the excerpt in every branch. |
36
+ | `AUD-511-R03` / `AUD-588-B07` | **implemented, pending 5.8.14 re-audit** | `f613df9` makes ASK-09 parse the typed document from stdout or stderr, including a progress-prefixed stderr stream, and removes the four inherited variables that change its precondition. The regression exercises the real typed refusal shape. The prior claim that the payload premise was false remains retracted as an environment-contamination artifact. |
32
37
  | `AUD-588-B08` | **closed** | `c084555`; `impact` publishes its independent stdout-byte budget. |
33
- | `AUD-588-B11` (container/units subset) | **partially implemented in 5.8.12** | `d745d31` discovers nested Maven modules; `273ae8e` suppresses unsupported `pr-impact.unaffected_basis`. `impact` naming, source population units, risk tiers and plan narrative remain open. |
34
- | `AUD-511-R02` / `AUD-589-B02` | **partially mitigated in 5.8.12, still under investigation** | `b93f230` reuses one `SpringSemanticModel` across every declared `data-exposure` seed; `473f47a` routes `validation` through the shared CIR cache, and `91bd0c0` retains subcommand `--no-cache` compatibility. On the local BroadleafCommerce corpus at the final analyzer fingerprint, a first shared-CIR fill took 10.46 s and its warm `validation --compact` hit took 4.01 s with byte-identical output. This is a same-host cache-state observation, not the 5.8.9/5.8.11 external A/B: the six-run C3-120 comparison and the configured `saint-server` reproduction remain required. |
35
- | `AUD-588-B02`, `B06`, B11 residuals, `B12` | **partially open in 5.8.12** | `3869c87` excludes explicit EclipseLink from Hibernate applicability and effort; `037223e` publishes provider non-coverage. B11 parity and controlled cost calibration remain required. |
38
+ | `MCP-001` | **closed 5.8.13** | Deep corpus testing reproduced concurrent `CliRunner` stream capture leaking a tool response to the host stdout. `b2c9660` serializes the narrow process-global capture seam; concurrent real MCP calls and a regression test verify response isolation. |
39
+ | `AUD-513-N01` (`N-1`) | **closed in 5.8.14** | `rename-class` rewrote three Petclinic files under both `ASK_READONLY=1` and `--no-write`, then exited 0. The audit restored the tree; this is a write-policy breach, not an artifact-directory exception. `readonly.guard_mutation()` now refuses before any planned source write or physical rename; help names the command as mutating and regressions cover both readonly controls plus `--dry-run`. |
40
+ | `AUD-513-N02` / `B-4` / `N-5` | **N02/B-4 implemented in 5.8.14; N-5 open** | `posture.summary.unconditional` counted 1,697 on a non-Spring Struts tree and 1,573 on Mall, and `security` was `0/0/0` with no population. The posture projection now uses the canonical Spring IoC bean population, publishes its population/unit and separates unconditional security beans. Regressions cover non-Spring, mixed-bean and conditional/unconditional security fixtures. Progress/advice still use incompatible “Java files” scopes (`N-5`), so the `AUD-588-F02` family remains open. |
41
+ | `AUD-513-B01` / `B-3` / `B-5` | **B01/B-5 implemented in 5.8.14; B-3 closed as revalidated** | A MyBatis XML paired with a `*Mapper.java` interface now takes precedence over an absent `@Mapper` annotation, preserving XML-backed/`@MapperScan` interfaces in `mapper_interfaces` rather than misclassifying them as DTO mappers. `imports_found` now contains only actual Java imports; code, XML and build matches are emitted as `evidence`, including in compact output. `B-3` was stale against the current source: both views consume `JAVA_SPRING_SECTIONS`; a real MyBatis Mapper/XML regression proves the section is retained by `--agent`. |
42
+ | `AUD-513-N03/N04/N07/N08/N09`, `B-6/B-7/B-8`, `D-09` | **N03/N04/N07/N08/N09 implemented in 5.8.14; remainder open** | `impact` now always publishes the `candidates` field its not-found message names, including `[]` when no close symbol exists. Budget advice no longer calls partial snapshot/RIS evidence a warm cache: it identifies that presence and says context/parse are unknown before analysis, whose payload then reports all four actual layers. README operational sections (`clone`, install, build, getting started, troubleshooting and related headings) are never promoted into a project summary; with no descriptive prose compact output publishes `project_summary: null` and `summary_basis`. `security_posture.limitations` is now cache-state invariant; dynamic execution advice travels in `security_posture.operational_hints`. Every numeric output bound rejects negative values at parse time with a structured `INVALID_INPUT` envelope (`flag`, `value`, `expected`); `--limit 0` still means no cap wherever that behavior was published. Budgets overrun, timing coverage is inconsistent, compact hides unresolved identities and cost anchors remain stale. |
43
+ | `AUD-588-B11` (container/units subset) | **partially implemented in 5.8.14** | `d745d31` discovers nested Maven modules; `273ae8e` suppresses unsupported `pr-impact.unaffected_basis`. `e53507d` separates direct impact matches from analysis seeds and implementation classes; `8386744` carries the established container-wiring fact into plan checklists and compare cost dimensions. Source population units and risk-tier wording remain open. |
44
+ | `AUD-511-R02` / `AUD-589-B02` / `AUD-513-N06` | **partially corrected; `data-exposure` open, P1** | Nine of ten measured commands recovered, many to their best historical timings. `data-exposure --config` did not: 42.7 s versus 16.2 s in 5.8.8 and a 28.9 s model, with byte-equivalent output. Measure it with the idle-host, isolated-cache, interleaved-control protocol before changing code, then compare its reuse path with `validation`. |
45
+ | `AUD-588-B02`, `B06`, B11 residuals, `B12` | **B02/B06 closed; B11/B12 open, P2** | `3869c87` excludes explicit EclipseLink from Hibernate applicability and effort; `037223e` publishes provider non-coverage. The re-audit verifies both and the payload reduction; `cf57457` makes aggregate wording name only applicable dimensions. Complete B11 consumer parity and calibrate B12 only from provenance-bearing controlled samples. |
46
+
47
+ ### Fourth Re-audit: 5.8.13
48
+
49
+ The fourth pass verifies the current facts that supersede the prior intake. There is no
50
+ crash/traceback and no regression in the published anchors. `B-2/D-05` remains a retracted
51
+ servlet premise, and the audit additionally verifies EclipseLink applicability/non-coverage,
52
+ typed `audit-report` refusal, nested Maven discovery and the `unaffected_basis` correction.
53
+ It leaves the following concrete queue rather than reopening closed facts.
54
+
55
+ | Recommendation | Status and direction |
56
+ |---|---|
57
+ | `AUD-588-F02` shared answer contracts | **Partial.** Reuse the existing authorities for exact target versus implementation cone, named source populations and container reach in plan/compare; do not add a parallel detector. |
58
+ | `AUD-588-F03` versioned cost calibration | **Open.** Capture repository, cache state, sample count and host provenance. The immediately actionable measurement is `data-exposure --config`; clean data is required before recalibration. |
59
+ | Risk cache observability | **Recommended hardening.** Publish working-set unit counts under progress or in the envelope to distinguish an empty compositor from a present-but-incomplete cache. |
60
+ | `AUD-588-F05` coverage expansion | **Locally verified only.** Dirty-tree `verify-edit` and the eight mutating/denied invocables remain unexercised in all four external rounds. |
61
+ | EclipseLink migration automation | **Deferred product feature.** The current applicability and non-coverage facts are verified; provider-specific migration automation is not a corrective fix. |
36
62
 
37
63
  ### Re-audit Intake: 5.8.11
38
64
 
@@ -594,7 +620,7 @@ class's subject, not its provenance.
594
620
 
595
621
  | ID | Item | Found | Severity | Status |
596
622
  |---|---|---|---|---|
597
- | P-1 | Telemetry is **opt-out**. Auditing a public-sector health client's code, it must be disabled *before* the first run, not after | 3.2.0 | **High (procurement)** | **closed 3.3.0** — opt-in: with no explicit choice on record, `is_enabled()` is False everywhere, so a fresh install transmits nothing on the run that prints the notice. The CI special case is gone with the default it existed to override; CI is still detected for one purpose, skipping a notice that has no terminal to appear on. The first-run notice became an invitation that states what *would* be collected. `telemetry status` distinguishes "no choice recorded" from "you chose disabled" (`stored_choice()` returns `None`, not `False`) a buyer auditing this needs to know which one they have. An explicit choice made before the change is honoured unchanged |
623
+ | P-1 | Telemetry default and procurement disclosure | 3.2.0 | **High (procurement)** | **reopened and corrected 5.8.12** — telemetry is on by default by explicit product decision, with `ask telemetry disable`, `SOURCECODE_TELEMETRY=0` and `DO_NOT_TRACK=1` honored before any event is sent. The first-run notice discloses the fields and the disable path. `telemetry status` distinguishes the default from an explicit disabled choice; the privacy policy documents the endpoint, 90-day retention and bounded anonymous fields. This supersedes the historical 3.3.0 opt-in closure for the current release |
598
624
  | P-2 | Licence state is ambiguous: `auth status` → `{"status":"unauthenticated","pro":true,"pro_reason":"early-adoption unlock"}`. The buyer cannot tell what it will cost or what they lose when the door closes | 3.2.0 | Medium | **closed 3.4.0** — one authority, `license.entitlement()`: `entitlement` (what runs), `source` (why: `license_key` / `early_adoption_unlock` / `free_tier`), `authenticated` (a separate fact — today one can be entitled without a credential), `paywall_active`, and `when_it_changes`, which states what the user loses when that source stops applying, in the terms the gate uses and **never as a price**. `is_pro` — what every gate reads — is now derived from it rather than computed beside it, which is how the status page came to contradict the commands. The legacy keys stay for consumers, are derived from the authority, and are listed in `deprecated_fields` |
599
625
 
600
626
  | P-3 | **The price is not published.** With P-2 closed the entitlement is unambiguous, but a buyer still cannot see what Pro costs or what a team of 25 pays. Eval #5 lists *"precio Pro público"* among the conditions for the top of its price band, beside the robustness fixes | 3.2.1 (eval #5) | Medium (procurement) | open — packaging question, not a page: the field's own reading is that **the value is frontal** (a first audit replaces 5–15 person-days) **and the recurring half is the CI gate**, so a full seat subscription on a product whose value peaks on run one *"genera churn en el mes 4"*. Model to test: one-off assessment **3–5 k€ per repo** + **8–12 €/dev/month** for the gate. Depends on C3-22: without the gate there is nothing recurring to sell |
@@ -3,29 +3,45 @@
3
3
  *Chief-engineer development record. This is the internal, dev-facing counterpart to the
4
4
  customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
5
5
 
6
- > **CURRENT STATE — 2026-08-19 — 5.8.12 release**
7
- >
8
- > The external 5.8.11 re-audit scores **78/100** over the same byte-identical
9
- > `saint-server` CIR and 53/61 invocables. It refutes two closures, exposes one new
10
- > security regression and measures a cross-command performance regression. The release
11
- > fixes remain valuable where verified: B05, B08 and the container/units B11 subset hold;
12
- > the B04 `data-exposure` premise is retracted by the auditor after configuration-based
13
- > verification. Historical tables below are superseded by this block where statuses differ.
6
+ > **CURRENT STATE — 2026-08-20fourth independent re-audit of 5.8.13**
7
+ >
8
+ > The fourth pass against the unchanged `saint-server` snapshot (`3dde0376`) raises the
9
+ > external score to **90/100** (75 -> 80 -> 78 -> 90), with the same **53/61 invocables
10
+ > (87%)** and no repository writes. It reports **no functional regression**: the 40+
11
+ > longitudinal anchors, including endpoints, posture, verify, contract, data-exposure and
12
+ > MCP, remain byte-equivalent. The audit subject is release `5.8.13`; release `5.8.14`
13
+ > ships the documented remediations without rewriting that external evidence.
14
+ >
15
+ > The prior 5.8.13 intake is superseded where it said that nine defects were new. The
16
+ > re-audit verifies the EclipseLink applicability/non-coverage fix, `audit-report`'s typed
17
+ > output refusal, servlet-mapping retraction, nested Maven discovery and the
18
+ > `unaffected_basis` correction. It also confirms that performance recovered in 9 of 10
19
+ > sampled commands. Historical rows remain below for traceability; this table is the only
20
+ > current correction queue.
14
21
  >
15
22
  > | Priority | Work | Acceptance direction |
16
23
  > |---|---|---|
17
- > | P0 | `AUD-588-B01` / `AUD-589-B01` / `C3-122`: silent composition exits in `risk` and `audit-report`. | **Implemented in 5.8.12:** `9884488` turns an exit-0 return without delivered output into a typed failure. Field-scale subprocess reproduction remains required. |
18
- > | P1 | `AUD-511-R01`: SEC-009 profile evidence reads comments. | **Implemented in 5.8.12:** `13362ec` uses comment-blanked Java and regresses a misleading Javadoc. |
19
- > | P1 | `AUD-511-R02`: 1.4-2.4x performance slowdown. | **Partially mitigated in 5.8.12:** `b93f230` shares the `data-exposure` semantic model across label seeds; `473f47a` gives `validation` the shared CIR cache; `91bd0c0` preserves the published `--no-cache` no-op. Local Broadleaf warm validation is lower, but controlled 5.8.9/5.8.11 remeasurement remains the acceptance gate. |
20
- > | P1 | `AUD-511-R03`: ASK-09 false `not_applicable`. | **Implemented in 5.8.12:** `47aee1e` uses the emitted envelope as authority and retains evidence for every result. |
21
- > | P1 | `AUD-588-B02/B06`: EclipseLink is billed a Hibernate migration. | **Implemented in 5.8.12:** `3869c87` excludes the axis; `037223e` publishes the unsupported-provider gap. |
22
- > | P2 | `AUD-588-B11` residuals and `B12`. | `d745d31` and `273ae8e` close nested-build discovery and false exclusion prose. Finish naming/population/tier/plan parity, then recalibrate cost advice under controlled evidence. |
23
- >
24
- > **Feature decisions:** `F01` (EclipseLink migration automation) remains deferred, but
25
- > provider non-coverage is a prerequisite bug fix. `F02` is partial and must consolidate
26
- > existing authorities rather than re-derive facts. `F03` is partial pending calibrated
27
- > measurements. `F04` remains opt-in, so foreground advice must not imply a heartbeat.
28
- > `F05` remains locally verified only; dirty-tree `verify-edit` is a validation gap.
24
+ > | P0 | `AUD-588-B01` / `AUD-589-B01`: `risk` still has a rare early path that exits 0 with neither parseable stdout nor its requested `-o` artifact. | **Instrumented, still open:** `5cfa9ba` publishes source, finding, candidate-defect and composed-defect working-set counts in every final/partial answer. Reproduce at least five cold/shared-cache starts and enforce the real-subprocess output invariant if the early return remains. |
25
+ > | P1 | `AUD-511-R03` / `AUD-588-B07`: ASK-09 remains `not_applicable` although its literal clean-environment probe emits `OUTPUT_TOO_LARGE`. | **Implemented in 5.8.14:** `f613df9` parses the typed document from stdout or stderr and clears the four execution variables that alter the probe. The row may close after a clean-environment field re-audit reports `pass`. |
26
+ > | P2 | `AUD-588-B11` residuals: `impact.matched_fqns` says `resolution: exact` while representing a large implementation cone; population labels, container-reach consumers and plan/compare disclosures still diverge. | **Target/cone and consumers implemented in 5.8.14:** `e53507d` separates direct matches, expanded analysis seeds and implementation classes; `8386744` carries existing container wiring into plan checklists and compare cost dimensions. Name source populations and reconcile remaining risk-tier wording. |
27
+ > | P2 | `AUD-588-B02/B06` wording and `AUD-588-B12/F03` calibration: `readiness_aggregate.note` still lists Hibernate after it was excluded, and cost advice needs clean current anchors. | **Wording implemented in 5.8.14:** `cf57457` derives aggregate names from applicable dimensions. Recalibrate only from controlled measurements and record repository, cache state, sample count and host provenance; do not promote the `SEC-009` severity observation into a defect without a product decision. |
28
+ > | P0 | `AUD-513-N01` (`N-1`): `rename-class` ignores `ASK_READONLY=1` and `--no-write`, rewrites source and exits 0. | **closed in 5.8.14:** a mutation guard rejects before any source write or physical rename; help lists `rename-class` as mutating; regressions cover both controls and readonly `--dry-run`. |
29
+ > | P1 | `AUD-513-N02` + `B-4` + `N-5`: posture counts IR types as unconditional beans, reports security `0/0/0` with no population, and calls two scopes “Java files”. | **N02/B-4 implemented in 5.8.14:** posture now counts only Spring IoC bean definitions and states bean/security populations, units and unconditional security beans. **N-5 remains open:** bind progress/advisory counts to the same named population. |
30
+ > | P1 | `AUD-511-R02` / `AUD-589-B02` + `AUD-513-N06`: performance recovered in 9 of 10 measured commands, but `data-exposure --config` remains 42.7 s, 2.6x the 5.8.8 measurement and above the 28.9 s model despite output equivalence. | Before code changes, run the documented idle-host, isolated-cache, interleaved-control protocol. Compare its path with the shared-CIR reuse that recovered `validation`; do not call the performance family closed until this command converges. |
31
+ > | P1 | `AUD-513-B01` / `B-3` / `B-5`: MyBatis facts conflict, `--agent` is not the help-promised maximum-signal superset, and `imports_found` can name a non-import declaration. | **B01/B-5 implemented in 5.8.14:** matching MyBatis XML outranks the no-`@Mapper` DTO heuristic, and `imports_found` now contains only actual Java imports while code/XML/build matches use `evidence`. **B-3 closed as revalidated:** `JAVA_SPRING_SECTIONS` is shared by both views; regression proves a real MyBatis section reaches `--agent`. |
32
+ > | P2 | `AUD-513-N03/N04/N07/N08/N09`, `B-6/B-7/B-8`, and `D-09`. | **N03/N04/N07/N08/N09 implemented in 5.8.14:** `impact` always emits the `candidates` field it names, including an empty list; budget advice now identifies snapshot/RIS presence separately and leaves context/parse unknown until analysis, matching the four-layer payload; README summaries skip operational headings and publish `project_summary: null` plus `summary_basis` when no descriptive prose exists; cache-sensitive execution advice now lives in `security_posture.operational_hints`, not semantic limitations; all numeric output bounds reject negative values before analysis with structured `flag`, `value` and lower-bound `expected` fields, while published `--limit 0` no-cap behavior remains intact. Bound partial budgets, account timing coverage, preserve compact unresolved identities, and remeasure cost anchors. |
33
+ >
34
+ > **Release status:** all entries above marked “pending `5.8.14`” are shipped in
35
+ > `5.8.14`; their external `5.8.13` verification status is intentionally unchanged.
36
+ >
37
+ > **Feature decisions:** `AUD-588-F02` remains the shared remediation for population,
38
+ > unit and reach contracts; the fourth pass confirms it is still partial. `AUD-588-F03`
39
+ > remains a versioned, provenance-bearing calibration feature: add repeated isolated-cache
40
+ > measurements before changing anchors. `AUD-588-F05` remains locally verified only because
41
+ > dirty-tree `verify-edit` and eight mutating/denied invocables were not exercised. The
42
+ > suggested `risk` working-set instrumentation is accepted as observability hardening, not a
43
+ > parallel analysis authority. EclipseLink automation stays deferred and progress stays
44
+ > opt-in.
29
45
 
30
46
  > **CURRENT STATE — 2026-08-19 — 5.8.9 working tree**
31
47
  >
@@ -3,21 +3,62 @@
3
3
  *A software-knowledge platform for large codebases. Written for an engineering
4
4
  director; no internal implementation knowledge assumed.*
5
5
 
6
- > **DOCUMENT STATUS — 2026-08-19**
6
+ > **DOCUMENT STATUS — 2026-08-20 — fourth independent re-audit of 5.8.13**
7
7
  >
8
- > The current release is **5.8.12**. Its external re-audit scores **78/100** on the
9
- > same repository and protocol as the two prior rounds (75, then 80). The repository
10
- > model is byte-identical, so the reported changes are execution, rule or presentation
11
- > behavior. This block supersedes earlier release claims where they conflict.
8
+ > The current audited release is **5.8.13**. Its fourth independent Windows/Git Bash pass
9
+ > against the unchanged `saint-server` snapshot scores **90/100**, up from 75, 80 and 78.
10
+ > It keeps coverage at **53/61 invocables (87%)**, finds no crash/traceback or repository
11
+ > write, and reports no regression in the 40+ longitudinal functional anchors. This is a
12
+ > substantial correction to the previous intake: EclipseLink applicability and disclosure,
13
+ > typed `audit-report` output refusal, nested Maven discovery and the endpoint-disposition
14
+ > disclosure are verified, not open release claims.
12
15
  >
13
- > **Closed in the current working tree:** `B23`, `B24`, `B25`, `B26`, `B27`, `B28`, the
14
- > `C4-25` residual, `C4-27`, `C4-28`, additive `C1-49`, and `C3-130` for `plan`/`cold-start`,
15
- > plus .NET dependency-cache invalidation, `BUG-004` Java module exclusion, and `C3-55`.
16
- > **The round-11 bug queue is closed.** `B4` was closed after six convergent passes with an
17
- > interleaved `impact` control. `R2`, `P1-proc`, `C3-127`, `C3-129` and `B21` were already
18
- > shipped in 5.8.6; `C3-84` was corrected by measurement. Remaining roadmap work is feature,
19
- > profiling, compatibility-window or host-specific CI work, not an unresolved bug from that
20
- > audit. Historical scores and release claims below remain historical; this block is current.
16
+ > **Release blockers:** `risk` still has a rare exit-0/no-output path and
17
+ > `data-exposure --config` remains 2.6x slower than its 5.8.8 measurement. Release 5.8.14
18
+ > instruments `risk`'s compositor for field reproduction, repairs ASK-09's typed
19
+ > stderr-envelope probe, separates exact impact targets from implementation cones, carries
20
+ > container reach into plan/compare, and corrects EclipseLink aggregate wording. Source
21
+ > population names and provenance-based cost calibration remain P2 work. Dirty-tree
22
+ > `verify-edit` and eight mutating or denied commands remain validation gaps, not asserted
23
+ > failures.
24
+
25
+ > **IMPLEMENTATION UPDATE — released in 5.8.14**
26
+ >
27
+ > `AUD-513-N01` closes the write-policy breach reported on `rename-class`. The policy now
28
+ > distinguishes optional artifact creation from source mutation: a mutation guard stops the
29
+ > entire rename plan before its first write, including the physical Java file rename. The
30
+ > command is now explicit in root help's mutating-command table. Regressions exercise both
31
+ > `--no-write` and `ASK_READONLY=1`, while retaining a successful readonly `--dry-run`.
32
+ >
33
+ > `AUD-513-N02` and `B-4` close the posture population falsehood: the bean summary is now
34
+ > derived from the canonical Spring IoC registry, excludes plain/JPA-only/non-Spring symbols,
35
+ > and declares both population units and unconditional security configurations. `N-5` remains
36
+ > open because it concerns a different progress/advisory population.
37
+ >
38
+ > `AUD-513-B01` closes the MyBatis fact conflict: an XML-backed mapper interface is no longer
39
+ > demoted to a DTO mapper merely because it omits `@Mapper` and relies on `@MapperScan`.
40
+ > `AUD-513-B05` also closes: `imports_found` now names only Java imports, with generic trigger
41
+ > evidence carried separately. `B-3` is closed as revalidated: the agent and compact views
42
+ > share their Java/Spring section authority, now explicitly regressed with a MyBatis pair.
43
+
44
+ > **Recommended product work**
45
+ >
46
+ > First make `risk`'s output promise an end-to-end invariant and expose its initial
47
+ > working-set count so incomplete-cache behavior is diagnosable. Then repair the ASK-09
48
+ > harness to read the emit-seam document and either sanitize or disclose inherited execution
49
+ > variables. Measure `data-exposure` under the isolated-cache, interleaved-control protocol
50
+ > before optimizing it. Complete the shared answer-contract layer (`AUD-588-F02`) by binding
51
+ > existing authorities into impact, plan and compare, and recalibrate cost guidance only from
52
+ > provenance-bearing measurements (`AUD-588-F03`). EclipseLink automation remains deferred;
53
+ > its current applicability and non-coverage disclosure are already verified.
54
+
55
+ > **MCP HARDENING — released in 5.8.13**
56
+ >
57
+ > Deep multi-repository stress testing found that concurrent MCP calls could race the
58
+ > process-global stdout/stderr capture used by the in-process CLI adapter. `b2c9660`
59
+ > serializes that narrow capture seam, preventing one tool response from reaching the MCP
60
+ > host or another tool call. This does not change analysis contracts or reopen the external
61
+ > audit queue; it makes the agent integration reliable under concurrent dispatch.
21
62
 
22
63
  > **5.8.11 RE-AUDIT CORRECTION**
23
64
  >
@@ -954,10 +954,13 @@ mantiene el alias breve de versión para compatibilidad.
954
954
 
955
955
  ```bash
956
956
  ask telemetry status # ver el ajuste actual (y si llegaste a elegir)
957
- ask telemetry enable # activar (opt-in)
958
- ask telemetry disable # volver a desactivar
957
+ ask telemetry enable # activar
958
+ ask telemetry disable # desactivar
959
959
  ```
960
- La telemetría anónima está **desactivada por defecto (opt-in)**: no se recoge ni se envía nada hasta que la actives, ni siquiera en la primera ejecución. Nunca incluye tu código, rutas ni secretos.
960
+ La telemetría anónima está **activada por defecto**. Recoge sólo versión, sistema, comandos,
961
+ flags, duración aproximada, tamaño agrupado del repositorio y tipo de error. Nunca incluye tu
962
+ código, rutas ni secretos. Desactívala con `ask telemetry disable`, `SOURCECODE_TELEMETRY=0`
963
+ o `DO_NOT_TRACK=1`.
961
964
 
962
965
  ---
963
966
 
@@ -138,7 +138,7 @@ pipx install sourcecode # isolated install, no venv needed
138
138
 
139
139
  # Verify
140
140
  ask version
141
- # ask 5.8.12
141
+ # ask 5.8.14
142
142
  ```
143
143
 
144
144
  Requires Python 3.9+.
@@ -1199,7 +1199,7 @@ explaining. The rest do one thing; `ask <command> --help` is the whole story.
1199
1199
  | `ask retrieve` | parked | Typed knowledge queries over the model — kept working, no longer developed |
1200
1200
  | `ask baseline capture\|diff\|trend` | supported | Versioned architectural metrics over time; see [`ask trend`](#ask-trend-dir--how-the-architecture-moved) |
1201
1201
  | `ask cache status\|warm\|model\|clear\|freshness` | supported | Cache inspection; `ask cache model` states what a warm buys each command |
1202
- | `ask config` · `ask version` · `ask activate` · `ask auth` · `ask telemetry` · `ask mcp` | supported | Configuration, version, licence, authentication, telemetry (off by default), MCP integration |
1202
+ | `ask config` · `ask version` · `ask activate` · `ask auth` · `ask telemetry` · `ask mcp` | supported | Configuration, version, licence, authentication, telemetry (on by default), MCP integration |
1203
1203
 
1204
1204
  ## Typical workflows
1205
1205
 
@@ -1287,7 +1287,7 @@ ask mcp serve
1287
1287
  ask mcp remove
1288
1288
  ```
1289
1289
 
1290
- The MCP server exposes structural analysis tools to AI agents without requiring the agent to call the CLI directly. Claude Desktop and Cursor can query impact, endpoints, and context through the MCP protocol.
1290
+ The MCP server exposes structural analysis tools to AI agents without requiring the agent to call the CLI directly. Claude Desktop and Cursor can query impact, endpoints, and context through the MCP protocol. Concurrent requests are accepted safely: ASK serializes only the in-process CLI capture seam, because its stdout/stderr redirection is process-global, so one tool response cannot contaminate another.
1291
1291
 
1292
1292
  ---
1293
1293
 
@@ -1,8 +1,8 @@
1
1
  # Privacy & Telemetry
2
2
 
3
- `ask` includes an anonymous telemetry system that is **off until you turn it on (opt-in)**. Nothing is collected or transmitted before you run `ask telemetry enable` — not on the first run, not in CI, not anywhere. The data, if you do opt in, is strictly anonymous: no source code, paths, secrets, or repository content are ever collected.
3
+ `ask` includes an anonymous telemetry system that is **on by default**. It collects only bounded usage metadata: no source code, paths, secrets, or repository content are ever collected. Disable it with `ask telemetry disable`, `SOURCECODE_TELEMETRY=0`, or `DO_NOT_TRACK=1`.
4
4
 
5
- **This changed in 3.3.0.** Telemetry used to be opt-out. Auditing regulated third-party code, the default is not a preference: a reviewer must be able to state that nothing left the machine, and "disable it after the first run" cannot give that guarantee. If you had explicitly enabled or disabled it before, your choice is unchanged; if you never chose, telemetry is now off.
5
+ Telemetry is enabled by default because ASK's product operation depends on command and performance coverage. The disable controls are honored before any event is sent, including in CI.
6
6
 
7
7
  ---
8
8
 
@@ -10,8 +10,8 @@
10
10
 
11
11
  ```bash
12
12
  ask telemetry status # check current setting, and whether you ever chose
13
- ask telemetry enable # opt in (remembered)
14
- ask telemetry disable # opt back out (remembered)
13
+ ask telemetry enable # enable (remembered)
14
+ ask telemetry disable # disable (remembered)
15
15
 
16
16
  export SOURCECODE_TELEMETRY=0 # disable via environment variable
17
17
  export SOURCECODE_TELEMETRY=1 # force enable via environment variable
@@ -23,13 +23,13 @@ Precedence, highest first:
23
23
  1. `SOURCECODE_TELEMETRY` environment variable (`0` = off, `1` = on)
24
24
  2. `DO_NOT_TRACK` environment variable (any value other than empty/`0` disables)
25
25
  3. Your saved choice in the config file (`telemetry enable` / `disable`)
26
- 4. Default: **off**, everywhere — no choice on record means nothing is sent
26
+ 4. Default: **on** — no choice on record enables bounded anonymous events
27
27
 
28
28
  ---
29
29
 
30
30
  ## Why telemetry exists
31
31
 
32
- ASK Engine is a local analysis tool with no usage visibility by default.
32
+ ASK Engine is a local analysis tool with bounded anonymous usage visibility by default.
33
33
  Anonymous telemetry helps answer questions like:
34
34
 
35
35
  - Which commands do developers actually use?
@@ -54,7 +54,8 @@ When telemetry is enabled, these fields are sent per command invocation:
54
54
  | `py` | `3.11` | Python major.minor only |
55
55
  | `os` | `macos` | OS family: linux / macos / windows / other |
56
56
  | `arch` | `x64` | CPU family: x64 / arm64 / other |
57
- | `cmd` | `analyze` | Command run: analyze / prepare-context |
57
+ | `cmd` | `analyze` | Command family: analyze / prepare-context / telemetry / mcp |
58
+ | `command` | `spring-audit` | Closed ASK command identifier; no arguments or paths |
58
59
  | `flags` | `["--agent"]` | Flag names only (allowlist), no values |
59
60
  | `output_fmt` | `json` | Output format: json or yaml |
60
61
  | `repo_size` | `small` | File count range bucket (see below) |
@@ -74,8 +75,8 @@ which capabilities agents actually use.
74
75
  The tool **arguments are never sent** — they carry repository paths. Neither is any part
75
76
  of the result. The name is a fixed identifier from ASK Engine's own tool registry, not
76
77
  user input, and it is still shape-validated by the sanitization layer before transmission.
77
- These events follow the same opt-in as everything else: until you enable telemetry, nothing
78
- is recorded.
78
+ These events follow the same setting as everything else: they are recorded only while
79
+ telemetry is enabled.
79
80
 
80
81
  ### Repo size buckets
81
82
 
@@ -135,11 +136,13 @@ This filter is tested in `tests/test_telemetry.py`. Tests explicitly verify that
135
136
 
136
137
  ## Data transmission
137
138
 
138
- - Events are sent to `https://t.sourcecode.dev/v1/event` (configurable via `SOURCECODE_TELEMETRY_ENDPOINT`)
139
+ - Events are sent to `https://qkndlmyekvujjdgthtmz.supabase.co/functions/v1/telemetry` (configurable via `SOURCECODE_TELEMETRY_ENDPOINT`)
139
140
  - Transmission happens in a background daemon thread — it never blocks the CLI
140
141
  - Timeout is 3 seconds — if the request fails or times out, it is silently dropped
141
142
  - No retries — a missed event is acceptable
142
143
  - No queuing or batching to disk
144
+ - The server rejects payloads over 16 KiB and applies an in-memory rate limit of 120 requests per minute per forwarding address
145
+ - Events are retained for 90 days; the `purge_telemetry_events()` function is scheduled in the Supabase deployment
143
146
 
144
147
  ---
145
148
 
@@ -161,16 +164,16 @@ The file looks like:
161
164
  }
162
165
  ```
163
166
 
164
- If you run `ask telemetry enable` or `disable`, `enabled` is set accordingly and that choice is remembered. If you have never made an explicit choice, the `enabled` key is absent and telemetry is **off**. `ask telemetry status` tells you which of the two you have — "no choice recorded" and "you chose disabled" are different answers. You can edit or delete this file directly at any time.
167
+ If you run `ask telemetry enable` or `disable`, `enabled` is set accordingly and that choice is remembered. If you have never made an explicit choice, the `enabled` key is absent and telemetry follows the **on** default. `ask telemetry status` tells you whether the default applies or you explicitly disabled it. You can edit or delete this file directly at any time.
165
168
 
166
169
  ---
167
170
 
168
171
  ## First-run notice
169
172
 
170
- The first time you run `ask` interactively (not in CI, not piped), you are shown a brief, one-time notice explaining that telemetry is **off**, what *would* be collected if you enabled it, and how to enable it if you want to help.
173
+ The first time you run `ask` interactively (not in CI, not piped), you are shown a brief, one-time notice explaining that telemetry is **on**, what is collected, and how to disable it.
171
174
 
172
- - It is an **invitation, not a prompt** — no answer is required and your input is never read
173
- - Nothing has been collected when it appears, and printing it changes no setting
175
+ - It is a disclosure, not a prompt — no answer is required and your input is never read
176
+ - Printing it changes no setting
174
177
  - It is shown **once only**
175
178
  - In CI environments (GitHub Actions, CircleCI, etc.) the notice is skipped
176
179
  - When piped or run non-interactively, the notice is skipped
@@ -179,7 +182,7 @@ The first time you run `ask` interactively (not in CI, not piped), you are shown
179
182
 
180
183
  ## CI environments
181
184
 
182
- CI needs no special case any more: with no choice on record telemetry is off, in CI and out of it. An explicit opt-in (`ask telemetry enable` or `SOURCECODE_TELEMETRY=1`) is honored in CI as anywhere else. CI is still detected for one purpose only skipping the first-run notice, which has no terminal to appear on:
185
+ Telemetry remains on in CI unless `SOURCECODE_TELEMETRY=0` or `DO_NOT_TRACK=1` is set. CI is detected only to skip the first-run notice, which has no terminal to appear on:
183
186
 
184
187
  `CI`, `CONTINUOUS_INTEGRATION`, `GITHUB_ACTIONS`, `CIRCLECI`, `TRAVIS`, `JENKINS_URL`, `BUILDKITE`, `GITLAB_CI`, `TF_BUILD`, `TEAMCITY_VERSION`, `DRONE`, `SEMAPHORE`
185
188
 
@@ -191,7 +194,7 @@ The entire telemetry implementation is in `src/sourcecode/telemetry/`. You can r
191
194
 
192
195
  Key files:
193
196
  - `config.py` — configuration read/write
194
- - `consent.py` — first-run invitation notice
197
+ - `consent.py` — first-run disclosure notice
195
198
  - `events.py` — event schema
196
199
  - `filters.py` — privacy sanitization (the critical safety layer)
197
200
  - `transport.py` — HTTP transmission
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.8.12"
7
+ version = "5.8.14"
8
8
  description = "Persistent structural context and ultra-fast repeated analysis for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -4,4 +4,4 @@ ASK Engine is the product. ``ask`` is the canonical CLI command; ``sourcecode``
4
4
  the legacy compatibility alias and the Python/PyPI package name. See
5
5
  docs/PRODUCT_IDENTITY.md (normative)."""
6
6
 
7
- __version__ = "5.8.12"
7
+ __version__ = "5.8.14"
@@ -139,7 +139,9 @@ def build_change_plan(
139
139
  ),
140
140
  }
141
141
 
142
- seeds = list(blast["matched_fqns"])
142
+ # The user-facing match names the requested target; planning must retain the
143
+ # subtype-expanded seeds that the blast-radius authority actually analysed.
144
+ seeds = list(blast.get("analysis_seed_fqns") or blast["matched_fqns"])
143
145
  container_wired = [w.to_dict() for w in detect_classes(cir, seeds)]
144
146
  meta = _node_meta(cir)
145
147
  affected = _dependents_closure(cir.reverse_graph or {}, seeds, max_depth, _NODE_CAP)
@@ -210,6 +212,11 @@ def build_change_plan(
210
212
  checklist.append(
211
213
  f"{len(sec)} secured endpoint(s) in scope — re-check authorization."
212
214
  )
215
+ if container_wired:
216
+ checklist.append(
217
+ f"{len(container_wired)} container-wired component(s) are in scope — "
218
+ "review their declared framework wiring because fan-in does not measure it."
219
+ )
213
220
  txn = blast.get("transactional_boundaries_touched") or []
214
221
  if txn:
215
222
  checklist.append(f"{len(txn)} transactional boundary/boundaries in scope.")