sourcecode 4.10.6__tar.gz → 4.11.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. {sourcecode-4.10.6 → sourcecode-4.11.0}/CHANGELOG.md +198 -0
  2. {sourcecode-4.10.6 → sourcecode-4.11.0}/PKG-INFO +26 -7
  3. {sourcecode-4.10.6 → sourcecode-4.11.0}/README.md +25 -6
  4. {sourcecode-4.10.6 → sourcecode-4.11.0}/pyproject.toml +1 -1
  5. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/__init__.py +1 -1
  6. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/cache.py +8 -3
  7. sourcecode-4.11.0/src/sourcecode/cache.tmp_new +772 -0
  8. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/cache_model.py +170 -46
  9. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/canonical_ir.py +10 -3
  10. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/change_plan.py +8 -3
  11. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/cli.py +863 -220
  12. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/context_cache.py +9 -3
  13. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/context_graph.py +8 -3
  14. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/data_exposure.py +10 -1
  15. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detach.py +27 -1
  16. sourcecode-4.11.0/src/sourcecode/execution_plan.py +428 -0
  17. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/format_contract.py +48 -6
  18. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/non_coverage.py +90 -2
  19. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/posture.py +3 -3
  20. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/progress.py +124 -4
  21. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/remedies.py +37 -5
  22. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/repository_ir.py +42 -4
  23. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/rule_catalog.py +5 -1
  24. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/security_posture.py +1 -1
  25. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/serializer.py +13 -0
  26. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/verify_repo.py +2 -2
  27. {sourcecode-4.10.6 → sourcecode-4.11.0}/.github/workflows/build-windows.yml +0 -0
  28. {sourcecode-4.10.6 → sourcecode-4.11.0}/.gitignore +0 -0
  29. {sourcecode-4.10.6 → sourcecode-4.11.0}/.ruff.toml +0 -0
  30. {sourcecode-4.10.6 → sourcecode-4.11.0}/CLAUDE.md +0 -0
  31. {sourcecode-4.10.6 → sourcecode-4.11.0}/CONTRIBUTING.md +0 -0
  32. {sourcecode-4.10.6 → sourcecode-4.11.0}/LICENSE +0 -0
  33. {sourcecode-4.10.6 → sourcecode-4.11.0}/SECURITY.md +0 -0
  34. {sourcecode-4.10.6 → sourcecode-4.11.0}/raw +0 -0
  35. {sourcecode-4.10.6 → sourcecode-4.11.0}/scripts/compare_integration_engines.py +0 -0
  36. {sourcecode-4.10.6 → sourcecode-4.11.0}/scripts/customer_smoke_test.sh +0 -0
  37. {sourcecode-4.10.6 → sourcecode-4.11.0}/scripts/generate_jdk_exports.py +0 -0
  38. {sourcecode-4.10.6 → sourcecode-4.11.0}/scripts/perf_harness.py +0 -0
  39. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/adaptive_scanner.py +0 -0
  40. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/archetype.py +0 -0
  41. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/architectural_baseline.py +0 -0
  42. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/architectural_delta.py +0 -0
  43. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/architecture_analyzer.py +0 -0
  44. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/architecture_summary.py +0 -0
  45. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/ast_extractor.py +0 -0
  46. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/audit_report.py +0 -0
  47. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/baseline_autocapture.py +0 -0
  48. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/call_surface.py +0 -0
  49. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/caller_metrics.py +0 -0
  50. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/caller_reach.py +0 -0
  51. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/chain_rules.py +0 -0
  52. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/cir_graphs.py +0 -0
  53. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/classifier.py +0 -0
  54. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/client_calls.py +0 -0
  55. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/code_notes_analyzer.py +0 -0
  56. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/compare.py +0 -0
  57. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/confidence_analyzer.py +0 -0
  58. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/constraint_diff.py +0 -0
  59. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/container_wiring.py +0 -0
  60. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/context_scorer.py +0 -0
  61. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/context_summarizer.py +0 -0
  62. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/contract_diff.py +0 -0
  63. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/contract_init.py +0 -0
  64. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/contract_model.py +0 -0
  65. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/contract_pipeline.py +0 -0
  66. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/coverage_parser.py +0 -0
  67. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/data_labels.py +0 -0
  68. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/defect_identity.py +0 -0
  69. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/degradation.py +0 -0
  70. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/dependency_analyzer.py +0 -0
  71. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/deployment_prefix.py +0 -0
  72. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/__init__.py +0 -0
  73. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/base.py +0 -0
  74. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
  75. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/dart.py +0 -0
  76. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/dotnet.py +0 -0
  77. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/elixir.py +0 -0
  78. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/go.py +0 -0
  79. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/heuristic.py +0 -0
  80. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/hybrid.py +0 -0
  81. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/java.py +0 -0
  82. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  83. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/nodejs.py +0 -0
  84. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/parsers.py +0 -0
  85. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/php.py +0 -0
  86. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/project.py +0 -0
  87. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/python.py +0 -0
  88. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/ruby.py +0 -0
  89. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/rust.py +0 -0
  90. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/systems.py +0 -0
  91. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/terraform.py +0 -0
  92. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/detectors/tooling.py +0 -0
  93. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/doc_analyzer.py +0 -0
  94. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/dynamic_argument_surface.py +0 -0
  95. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/endpoint_literals.py +0 -0
  96. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/endpoint_metrics.py +0 -0
  97. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/entrypoint_classifier.py +0 -0
  98. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/env_analyzer.py +0 -0
  99. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/envelope.py +0 -0
  100. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/environment_resolution.py +0 -0
  101. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/error_schema.py +0 -0
  102. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/evidence_provider.py +0 -0
  103. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/explain.py +0 -0
  104. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/facts/__init__.py +0 -0
  105. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/facts/registry.json +0 -0
  106. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/file_chunker.py +0 -0
  107. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/file_classifier.py +0 -0
  108. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/filter_surface.py +0 -0
  109. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/fqn_utils.py +0 -0
  110. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/git_analyzer.py +0 -0
  111. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/git_checkout.py +0 -0
  112. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/graph_analyzer.py +0 -0
  113. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/graph_evidence.py +0 -0
  114. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/hibernate_strat.py +0 -0
  115. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/identity_fallback.py +0 -0
  116. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/integration_coordinates.py +0 -0
  117. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/jdk_exports.py +0 -0
  118. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/license.py +0 -0
  119. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/__init__.py +0 -0
  120. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  121. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  122. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  123. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  124. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  125. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/orchestrator.py +0 -0
  126. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/registry.py +0 -0
  127. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/runner.py +0 -0
  128. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp/server.py +0 -0
  129. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/mcp_nudge.py +0 -0
  130. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/metrics_analyzer.py +0 -0
  131. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/migrate_check.py +0 -0
  132. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/migration_blast.py +0 -0
  133. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/openapi_surface.py +0 -0
  134. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/openrewrite_recipe.py +0 -0
  135. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/output_budget.py +0 -0
  136. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/output_encoding.py +0 -0
  137. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/parse_cache.py +0 -0
  138. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/path_admission.py +0 -0
  139. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/path_filters.py +0 -0
  140. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/perf.py +0 -0
  141. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/phased_run.py +0 -0
  142. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/pipe_contract.py +0 -0
  143. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/pr_comment_renderer.py +0 -0
  144. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/pr_impact.py +0 -0
  145. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/prepare_context.py +0 -0
  146. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/provenance.py +0 -0
  147. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/ranking_engine.py +0 -0
  148. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/readiness_timeline.py +0 -0
  149. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/reconciliation.py +0 -0
  150. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/redactor.py +0 -0
  151. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/reference_facts.py +0 -0
  152. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/release_info.py +0 -0
  153. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/relevance_scorer.py +0 -0
  154. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/rename_refactor.py +0 -0
  155. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/repo_classifier.py +0 -0
  156. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/__init__.py +0 -0
  157. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/context.py +0 -0
  158. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/errors.py +0 -0
  159. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/executor.py +0 -0
  160. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/planner.py +0 -0
  161. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/query.py +0 -0
  162. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/request.py +0 -0
  163. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/resolution.py +0 -0
  164. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/result.py +0 -0
  165. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/retriever.py +0 -0
  166. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/runtime.py +0 -0
  167. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/steps.py +0 -0
  168. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  169. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/steps_graph.py +0 -0
  170. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/steps_impact.py +0 -0
  171. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/steps_intf.py +0 -0
  172. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/steps_struct.py +0 -0
  173. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  174. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/ris.py +0 -0
  175. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/risk.py +0 -0
  176. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/runs.py +0 -0
  177. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/runtime_classifier.py +0 -0
  178. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/sarif.py +0 -0
  179. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/scanner.py +0 -0
  180. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/schema.py +0 -0
  181. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  182. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/security_config.py +0 -0
  183. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/security_config_scan.py +0 -0
  184. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/semantic_analyzer.py +0 -0
  185. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/semantic_impact_engine.py +0 -0
  186. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/semantic_integration_engine.py +0 -0
  187. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/semantic_services.py +0 -0
  188. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/servlet_surface.py +0 -0
  189. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/source_text.py +0 -0
  190. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_event_topology.py +0 -0
  191. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_findings.py +0 -0
  192. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_impact.py +0 -0
  193. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_model.py +0 -0
  194. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_profiles.py +0 -0
  195. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_properties.py +0 -0
  196. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_security_audit.py +0 -0
  197. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_semantic.py +0 -0
  198. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
  199. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/summarizer.py +0 -0
  200. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/target_admission.py +0 -0
  201. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/telemetry/__init__.py +0 -0
  202. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/telemetry/config.py +0 -0
  203. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/telemetry/consent.py +0 -0
  204. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/telemetry/events.py +0 -0
  205. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/telemetry/filters.py +0 -0
  206. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/telemetry/transport.py +0 -0
  207. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/test_gap_ranking.py +0 -0
  208. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/test_sources.py +0 -0
  209. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/text_input.py +0 -0
  210. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/token_estimate.py +0 -0
  211. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/tree_utils.py +0 -0
  212. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/type_usage_surface.py +0 -0
  213. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/validation_inference.py +0 -0
  214. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/validation_surface.py +0 -0
  215. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/verify_edit.py +0 -0
  216. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/verify_rules.py +0 -0
  217. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/version_check.py +0 -0
  218. {sourcecode-4.10.6 → sourcecode-4.11.0}/src/sourcecode/workspace.py +0 -0
  219. {sourcecode-4.10.6 → sourcecode-4.11.0}/supabase/functions/README.md +0 -0
  220. {sourcecode-4.10.6 → sourcecode-4.11.0}/supabase/functions/get-license/index.ts +0 -0
  221. {sourcecode-4.10.6 → sourcecode-4.11.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  222. {sourcecode-4.10.6 → sourcecode-4.11.0}/supabase/functions/telemetry/index.ts +0 -0
  223. {sourcecode-4.10.6 → sourcecode-4.11.0}/supabase/sql/license_event_ordering.sql +0 -0
  224. {sourcecode-4.10.6 → sourcecode-4.11.0}/supabase/sql/licensing_schema.sql +0 -0
  225. {sourcecode-4.10.6 → sourcecode-4.11.0}/supabase/sql/telemetry_events.sql +0 -0
@@ -2,6 +2,204 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [4.11.0] — 2026-08-07
6
+
7
+ **The queue behind Tier D: five ledger rows, and three batteries that were red in
8
+ the release before this one.** C3-59 · C3-56 (second half) · C3-52 · C3-60 (second
9
+ half) · CL-15 close here, one commit each. Two of them were bigger than the row
10
+ said, and both in the same direction — a flag that parses and does not check, a
11
+ message that promises output nobody writes:
12
+
13
+ - **`--format` was published by eleven commands that validated nothing**, so
14
+ `ask risk . --format bogus` answered with JSON as if the value had counted
15
+ (C3-59);
16
+ - **`--detach` told the operator "progress and errors go to `log`"** and the log
17
+ held one line, because a detached worker has no terminal and the heartbeat
18
+ switched itself off exactly where it is the only way to tell work from a hang
19
+ (C3-52).
20
+
21
+ ⚠ **Behaviour changes to read before upgrading a pipeline:**
22
+
23
+ - **An unsupported `--format` now exits 2** with the values that are valid, on
24
+ the eleven commands that used to accept anything and answer JSON. A script
25
+ passing a value that was never supported fails where it used to appear to work.
26
+ - **`--format/-f` is accepted after 34 more commands**, including the 29
27
+ `retrieve` intents, `modernize`, `schema`, `onboard` and `fix-bug`.
28
+ - **`ask config <path>` refuses a path that does not exist** (exit 1, the standard
29
+ envelope) instead of reporting "nothing is declared" about it.
30
+ - **A detached run writes heartbeat lines into its own log** unless `--progress`
31
+ or `ASK_PROGRESS` says otherwise. Nothing changes for a foreground, piped or CI
32
+ run that does not ask.
33
+
34
+ Three tests were **already red in 4.10.7** — each a battery that derives its
35
+ population from the CLI, so C4-17's and C4-20's own changes tripped them — and
36
+ they are fixed here. One of the three was not a test defect: it found `ask config`
37
+ answering about a repository that does not exist.
38
+
39
+ ### Changed
40
+
41
+ - **The `spring-audit` security section says what it is before it says what it
42
+ found** (CL-15). A field evaluation found the repository's critical SQL
43
+ injection by hand and ASK did not report it — correctly and by declaration
44
+ (NC-001: no dataflow) — but the section is announced as a *security surface*,
45
+ which invites reading it as a defect finder. The surface now states, from one
46
+ table rendered into both `--help` and the payload, that it reads the security
47
+ **configuration and exposure** (declared chain rules, open endpoints, disabled
48
+ controls, bypassable gates, each with file and line), that it is **not** a
49
+ vulnerability scanner, and where it is strongest: given a defect somebody else
50
+ found, `ask impact` and `ask risk` quantify what it reaches. The rule-family
51
+ label follows (`security surface` → `security configuration and exposure`). No
52
+ rule and no finding changed — this was always a naming defect.
53
+
54
+ ### Fixed
55
+
56
+ - **`ask config <path>` refuses a repository nobody could read** instead of
57
+ reporting on it (C4-21 follow-up). The command gained a repository argument in
58
+ 4.10.7 without the admission gate every other path-taking command uses, so
59
+ `ask config /nonexistent` answered *"Declaration: none at
60
+ /nonexistent/sourcecode.config.json"* with exit 0 — and *"nothing is declared
61
+ here"* is indistinguishable from *"nobody could look"*, which is the reading
62
+ ADR-0008 exists to prevent.
63
+
64
+ - **`ask cache model` states which repository its figures were measured on, and
65
+ what that means for yours** (C3-60, second half). It published `verify-edit` as
66
+ *14,6 s → 9,6 s → 5,6 s* and called it *"built for the edit loop"* while the
67
+ same command had not answered at 495 s on the field repository — both
68
+ measurements, one printed. The command now measures the scope it is run in
69
+ (same authority as `--help` and the remedies), says whether the published
70
+ figures transfer to it, and gives each command a `here:` line saying how it can
71
+ be run on *this* repository. No figure changed and nothing is projected: an
72
+ unmeasurable scope gets the reference figures unqualified, as before.
73
+
74
+ - **`--progress off | stderr | file:<path>` on every command that can make you
75
+ wait** (C3-52). The heartbeat existed and the watcher model everybody uses
76
+ could not see it: a supervisor reading the standard streams got nothing for
77
+ 703 seconds unless it knew to set `ASK_PROGRESS=1` or to poll the run record —
78
+ knowledge that appeared in no `--help` and in no payload. The choice is now
79
+ published on the command being typed (62 commands, population from the
80
+ registry), `ASK_PROGRESS` still sets the same thing in the environment, and an
81
+ unrecognised value is refused with exit 2 rather than silently falling back to
82
+ the default. Nothing changes for a piped or CI run that does not ask.
83
+ - **A detached run's log carries the progress its own envelope promises**
84
+ (C3-52). `--detach` printed *"Progress and errors go to `log`"* and the log
85
+ held one line, because a detached worker has no terminal and the heartbeat
86
+ disabled itself exactly where it is the only way to tell work from a hang. A
87
+ detached run now enables the heartbeat into its own log unless `--progress` or
88
+ `ASK_PROGRESS` says otherwise; no shell reads those bytes, so the PowerShell
89
+ `$?` problem (C3-66) cannot be reached from a detached run.
90
+
91
+ - **The progress heartbeat carries a denominator and an ETA** (C3-56, second
92
+ half). `phase=auditing 3342 Java files elapsed=6.8m` said the run was alive and
93
+ nothing about whether it was worth waiting for; the field's only way to tell
94
+ work from a hang was reading the worker's CPU time. The line now reads
95
+ `phase=auditing 2766 Java files stage=parsing 1458/2766 files elapsed=2.0s
96
+ eta=1.8s eta_covers=parsing`, with the counts coming from the loops that read
97
+ the files rather than from the spinner. The ETA **names what it covers**
98
+ (nothing here knows the cost of the stages after the counted one), is withheld
99
+ until it can be measured, and is dropped when the phase changes rather than
100
+ freezing at `2766/2766`. A run with no heartbeat enabled is not asked to count.
101
+
102
+ - **`-f` means `--format` on every command that publishes it, and every command
103
+ that answers with a payload document publishes it** (C3-59). `-f json` was
104
+ accepted by `endpoints` and `spring-audit` and refused by `modernize`, whose
105
+ error called `-f` a global flag *"as `ask -f <path>`"* — so the message taught
106
+ the collision it was meant to remove. The population is now the C4-17 rule one
107
+ level along (a payload command publishes `--format/-f`; a command that answers
108
+ in lines is exempt on the record in `cli.COMMANDS_WITHOUT_FORMAT`), and 34
109
+ commands gained the flag: `modernize`, `archetype`, `cold-start`, `schema`,
110
+ `onboard`, `fix-bug` and the 29 `retrieve` intents. One conversion in the emit
111
+ seam serves all of them, on the *stamped* document, so a YAML answer carries
112
+ the same `_meta` as the JSON one.
113
+ - **An unsupported `--format` is refused instead of silently ignored** (C3-59).
114
+ Eleven commands published the flag and validated nothing — `ask risk .
115
+ --format bogus` answered with JSON as if the value had counted. Validation
116
+ moved into the shared option factory, keyed off the command being run, so a
117
+ command cannot publish the flag and skip the check;
118
+ `sourcecode.format_contract.FORMAT_REGISTRY` is the one authority for what
119
+ each command accepts, and an invalid value exits 2 with the values that are
120
+ valid. `rename-class` keeps `-f` for `--from` (on the record in
121
+ `COMMANDS_WITHOUT_FORMAT_SHORTHAND`); its long `--format` is unchanged.
122
+
123
+ ## [4.10.7] — 2026-08-07
124
+
125
+ **Tier D, and with it the M13 bug queue.** Five ledger rows close (C4-17 · C4-18 ·
126
+ C4-19 · C4-20 · C4-21), one commit each, all of them discoverability: none was
127
+ publishing a false claim, and together they are the ergonomics score two field
128
+ evaluations put at 5/10. What remains of the queue is a *measurement*, not a fix —
129
+ the C3-53 re-run on Windows under an agent harness, which is written the same way
130
+ in the ledger and in the 4.10.6 entry below.
131
+
132
+ ⚠ **Three behaviour changes to read before upgrading a pipeline:**
133
+
134
+ - **`ask cache status --json` renames `cores` to `cached_cores`.** It always
135
+ counted cached core entries; `cores` is what a captured baseline calls the
136
+ machine's CPU count (C4-18).
137
+ - **`--output/-o` is now accepted after every command that publishes `--copy`**,
138
+ including eleven that refused it. On those the answer goes to the file and
139
+ stdout carries one `Written to <path>` line (C4-17).
140
+ - **`--detach` accepts every repository-wide and deep command**, not the six that
141
+ happened to be listed in a hand-kept table. `posture`, `modernize`, `repo-ir`
142
+ and `verify-edit` — four of the commands the field could not run in a session —
143
+ could not be detached before this release (C4-19).
144
+
145
+ ### Fixed
146
+
147
+ - **`ask --help` orders its front page by what will run on the repository being
148
+ read** (C4-19). *Start here* was, on the field repository, exactly the set of
149
+ commands that could not run there — four of five unrunnable in one evaluation,
150
+ three of five killing the session in the next. The help now measures the scope
151
+ (a capped tree walk plus two stat calls, paid only when help is what was asked
152
+ for) and groups the entries into **Runs now**, **Warm the cache first** and
153
+ **Too big for this session — `--output <file> --detach`**. What it deliberately
154
+ does not do is project a duration: `spring-audit` is 8.8 s on the 2 000-file
155
+ reference and was measured at 408 s on 3 342 files, so a scaled estimate would
156
+ be a confident falsehood; the class and the measured anchors are published
157
+ instead, and a command measured fast at field size (`endpoints`, 4.2 s) stays
158
+ on the fast list whatever its class. `--detach` accepts every repository-wide
159
+ and deep command now, not the six that happened to be in a hand-kept table:
160
+ `posture`, `modernize`, `repo-ir` and `verify-edit` were on the field's blocked
161
+ list and could not be detached.
162
+ - **A remedy is checked against the repository it is printed on** (C4-20).
163
+ `plan` pointed an unresolved symbol at `ask repo-ir`, and `onboard` named
164
+ `ask posture --profile <set>` as the authority — both correct, and neither
165
+ finished in an interactive session on the repository whose answer named them.
166
+ Every remedy block (`posture`, `data-exposure`, `verify`, the security-surface
167
+ limitation, the unresolved-target message) now carries `how_to_run_here` when
168
+ there is something to say: run it detached, or warm the cache first. Nothing is
169
+ added where the command runs in the foreground, and nothing is guessed where
170
+ the scope is unknown.
171
+ - **`--output/-o` works after every command that produces an answer** (C4-17).
172
+ It was a per-command decision, and the decisions disagreed: `endpoints`,
173
+ `validation` and `data-exposure` accepted it after the command, `baseline
174
+ capture` refused it — while its own siblings `baseline diff` and `baseline
175
+ trend` accepted it — and the refusal's hint blamed the placement rather than
176
+ the gap. The rule is now one line with its population taken from the CLI
177
+ registry: **a command that publishes `--copy` publishes `--output`**. Eleven
178
+ commands gained it (`version`, `baseline capture`, `cache status/warm/model/
179
+ freshness/context-stats`, `auth status`, `mcp status`, `mcp list-tools`,
180
+ `telemetry status`); on those the answer goes to the file and stdout carries
181
+ only `Written to <path>`. The hint for a genuinely global flag typed after a
182
+ subcommand was corrected with it: it said *"it goes before the command"*, which
183
+ is a placement that does nothing, since the root analysis is skipped as soon as
184
+ a subcommand is invoked.
185
+ - **`ask config` lists the repository's own declaration** (C4-21). `data-exposure`
186
+ answers `answered: false` until `sourcecode.config.json` declares which types
187
+ and fields are sensitive — the right refusal, since a label is a judgement
188
+ about a domain and is never inferred — but nothing afterwards said whether the
189
+ file had been picked up, so the last step of the cold start was a guess.
190
+ `ask config [path]` now resolves that file and reports its path, the labels
191
+ read from it, the custom security annotations, and any declaration that could
192
+ not be used; when it is absent, the path it looked at and the answer that
193
+ absence produces. The `data-exposure` refusal points at it (`declare.confirm`).
194
+ - **`cache status` no longer calls a cache count `Cores:`** (C4-18). The line
195
+ counted `core-*.json.gz` entries under the field name a captured baseline uses
196
+ for the machine's CPU count (`env: {cores: 20}` on the same machine, same
197
+ scope, minutes apart), and it sat beside `Views: 0 / CAS blobs: 0`, so
198
+ `Cores: 0` read as *the cache is empty* rather than *no core entries yet*. The
199
+ text line is `Cached cores: N entries` and the JSON key is `cached_cores`.
200
+ **Behaviour change for consumers of `ask cache status --json`: the `cores` key
201
+ is gone, replaced by `cached_cores`** — one fact, one name.
202
+
5
203
  ## [4.10.6] — 2026-08-07
6
204
 
7
205
  The M13 sanitation queue, tiers A through C plus the claims tier: **eighteen ledger
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 4.10.6
3
+ Version: 4.11.0
4
4
  Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
5
5
  License-File: LICENSE
6
6
  Keywords: agents,ai,codebase,context,developer-tools,llm
@@ -42,7 +42,7 @@ Description-Content-Type: text/markdown
42
42
 
43
43
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
44
44
 
45
- ![Version](https://img.shields.io/badge/version-4.10.6-blue)
45
+ ![Version](https://img.shields.io/badge/version-4.11.0-blue)
46
46
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
47
47
 
48
48
  > **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
@@ -73,8 +73,10 @@ These numbers are cache-layer benchmarks, not a promise for every command. Per-s
73
73
 
74
74
  With the right command class, ASK Engine becomes **constant infrastructure** inside agent loops — call the fast/context surfaces before edits and reserve deep compositions for the points where their evidence is worth the runtime.
75
75
 
76
- **Large-repo controls.** Set `ASK_PROGRESS=1` to get line heartbeats in non-TTY
77
- supervised runs. Long repo-wide/deep runs also write durable records under
76
+ **Large-repo controls.** Pass `--progress stderr` (or `--progress file:run.log`)
77
+ for line heartbeats in a non-TTY supervised run with the file being read so
78
+ far and an ETA for the stage being measured. `ASK_PROGRESS` sets the same thing
79
+ in the environment. Long repo-wide/deep runs also write durable records under
78
80
  `~/.sourcecode/runs/<repo-hash>/` by default, not inside the audited repository;
79
81
  set `ASK_RUNS_IN_REPO=1` only when repo-local `.ask/runs` records are intentional.
80
82
  Set `ASK_MAX_ANALYSIS_SECONDS=<seconds>` to fail before starting a repo-wide/deep
@@ -106,7 +108,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
106
108
  # pip / pipx
107
109
  pipx install sourcecode # or: pip install sourcecode
108
110
 
109
- ask version # ask 4.10.6 — and, on a build that has aged,
111
+ ask version # ask 4.11.0 — and, on a build that has aged,
110
112
  # how many releases have probably shipped since
111
113
  ```
112
114
 
@@ -322,7 +324,7 @@ from it.
322
324
  | `migrate-recipe` | experimental | the migration report as the OpenRewrite recipe that applies it | only recipes a finding named; the manual remainder published beside them; writes nothing without `--write`, and never a runnable command for an empty recipe list |
323
325
  | `data-exposure` | experimental | which routes can carry the data you labelled, and who reaches them | labels declared in `sourcecode.config.json` — never inferred from a name; `signature` and `call_reach` evidence published apart, field-level flow out of scope (NC-008). With nothing declared, `ask data-exposure /path/to/repo` answers `answered: false` and hands back the file, the key and an example to declare — it never reports zero exposed routes |
324
326
  | `endpoints` | core | every REST endpoint, effective path, security policy, confidence | Spring MVC + JAX-RS (~65 % recall on JAX-RS sub-resource locators). `--compact` answers the exposure census without the rows; `--servlets` lists the servlet-mounted surface as its own population; `--client-usage` says which routes the TS/JS client in this repository actually calls |
325
- | `spring-audit` | core | transactional anomalies + security surface + validation gaps | `--ci`, `-f github-comment`; `--table --rule SEC-008 --top-n 20` for human-scale review |
327
+ | `spring-audit` | core | transactional anomalies + security configuration/exposure + validation gaps | `--ci`, `-f github-comment`; `--table --rule SEC-008 --top-n 20` for human-scale review |
326
328
  | `migrate-check` | core | Boot 2→3 readiness + Java LTS/licensing inventory: located blockers, per-dimension score, effort, detected Java 8/11/17/21/25 evidence and explicit licensing-review signals | `--target-jdk 25` sets the target LTS route; `--blast-radius` orders the re-test plan; `--table --rule MIG-001 --band critical --top-n 20` for blocker triage |
327
329
  | `impact` / `impact-chain` | core | blast radius of a change, to the endpoints it reaches | target the **interface**, not the `Impl` |
328
330
  | `pr-impact` | core | the same, scoped to a PR diff | gating command: `--fail-on`, exit codes |
@@ -359,7 +361,21 @@ Honest limits worth knowing before you rely on it:
359
361
  - Architecture classification is tuned for Spring MVC layered apps; SPI/plugin models (e.g. Quarkus extensions) may be misclassified. JAX-RS subresource-locator endpoint recall is ~65%.
360
362
  - Self-invocation `@Transactional` bypass (same-class call skipping the proxy) is not detected.
361
363
 
362
- ### What the security surface does not answer
364
+ ### What the security section is, and what it does not answer
365
+
366
+ **What it reads:** the security *configuration and exposure* of a repository — which
367
+ rules the request chain declares, which endpoints they leave open, which controls are
368
+ present but disabled, and which custom gates can be bypassed, each with the file and
369
+ line that says so.
370
+
371
+ **What it is not:** a vulnerability scanner. No value flows through a program here, so
372
+ an injection, a deserialization sink or a logic flaw inside a method body is not looked
373
+ for, and its absence from the report is not evidence (NC-001, below).
374
+
375
+ **Where it is strongest:** given a defect somebody else found — a scanner finding, a
376
+ line from a review — `ask impact <symbol>` and `ask risk` quantify what it reaches: the
377
+ endpoints, the transactional boundaries and the modules downstream of it, with the
378
+ confidence of each hop. That is the question a taint scanner does not answer.
363
379
 
364
380
  Published because a product that states its limits is not compared on breadth — it is
365
381
  compared on depth. Each row is emitted in the payload too (`non_coverage`), so an agent
@@ -467,6 +483,9 @@ Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
467
483
 
468
484
  ```bash
469
485
  ask config # version, config file path, telemetry status
486
+ ask config /repo # + the repository's own sourcecode.config.json:
487
+ # data labels, custom security annotations,
488
+ # and any declaration that could not be used
470
489
  ask telemetry enable # anonymous telemetry is OFF by default (opt-in)
471
490
  ```
472
491
 
@@ -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-4.10.6-blue)
7
+ ![Version](https://img.shields.io/badge/version-4.11.0-blue)
8
8
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
9
9
 
10
10
  > **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
@@ -35,8 +35,10 @@ These numbers are cache-layer benchmarks, not a promise for every command. Per-s
35
35
 
36
36
  With the right command class, ASK Engine becomes **constant infrastructure** inside agent loops — call the fast/context surfaces before edits and reserve deep compositions for the points where their evidence is worth the runtime.
37
37
 
38
- **Large-repo controls.** Set `ASK_PROGRESS=1` to get line heartbeats in non-TTY
39
- supervised runs. Long repo-wide/deep runs also write durable records under
38
+ **Large-repo controls.** Pass `--progress stderr` (or `--progress file:run.log`)
39
+ for line heartbeats in a non-TTY supervised run with the file being read so
40
+ far and an ETA for the stage being measured. `ASK_PROGRESS` sets the same thing
41
+ in the environment. Long repo-wide/deep runs also write durable records under
40
42
  `~/.sourcecode/runs/<repo-hash>/` by default, not inside the audited repository;
41
43
  set `ASK_RUNS_IN_REPO=1` only when repo-local `.ask/runs` records are intentional.
42
44
  Set `ASK_MAX_ANALYSIS_SECONDS=<seconds>` to fail before starting a repo-wide/deep
@@ -68,7 +70,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
68
70
  # pip / pipx
69
71
  pipx install sourcecode # or: pip install sourcecode
70
72
 
71
- ask version # ask 4.10.6 — and, on a build that has aged,
73
+ ask version # ask 4.11.0 — and, on a build that has aged,
72
74
  # how many releases have probably shipped since
73
75
  ```
74
76
 
@@ -284,7 +286,7 @@ from it.
284
286
  | `migrate-recipe` | experimental | the migration report as the OpenRewrite recipe that applies it | only recipes a finding named; the manual remainder published beside them; writes nothing without `--write`, and never a runnable command for an empty recipe list |
285
287
  | `data-exposure` | experimental | which routes can carry the data you labelled, and who reaches them | labels declared in `sourcecode.config.json` — never inferred from a name; `signature` and `call_reach` evidence published apart, field-level flow out of scope (NC-008). With nothing declared, `ask data-exposure /path/to/repo` answers `answered: false` and hands back the file, the key and an example to declare — it never reports zero exposed routes |
286
288
  | `endpoints` | core | every REST endpoint, effective path, security policy, confidence | Spring MVC + JAX-RS (~65 % recall on JAX-RS sub-resource locators). `--compact` answers the exposure census without the rows; `--servlets` lists the servlet-mounted surface as its own population; `--client-usage` says which routes the TS/JS client in this repository actually calls |
287
- | `spring-audit` | core | transactional anomalies + security surface + validation gaps | `--ci`, `-f github-comment`; `--table --rule SEC-008 --top-n 20` for human-scale review |
289
+ | `spring-audit` | core | transactional anomalies + security configuration/exposure + validation gaps | `--ci`, `-f github-comment`; `--table --rule SEC-008 --top-n 20` for human-scale review |
288
290
  | `migrate-check` | core | Boot 2→3 readiness + Java LTS/licensing inventory: located blockers, per-dimension score, effort, detected Java 8/11/17/21/25 evidence and explicit licensing-review signals | `--target-jdk 25` sets the target LTS route; `--blast-radius` orders the re-test plan; `--table --rule MIG-001 --band critical --top-n 20` for blocker triage |
289
291
  | `impact` / `impact-chain` | core | blast radius of a change, to the endpoints it reaches | target the **interface**, not the `Impl` |
290
292
  | `pr-impact` | core | the same, scoped to a PR diff | gating command: `--fail-on`, exit codes |
@@ -321,7 +323,21 @@ Honest limits worth knowing before you rely on it:
321
323
  - Architecture classification is tuned for Spring MVC layered apps; SPI/plugin models (e.g. Quarkus extensions) may be misclassified. JAX-RS subresource-locator endpoint recall is ~65%.
322
324
  - Self-invocation `@Transactional` bypass (same-class call skipping the proxy) is not detected.
323
325
 
324
- ### What the security surface does not answer
326
+ ### What the security section is, and what it does not answer
327
+
328
+ **What it reads:** the security *configuration and exposure* of a repository — which
329
+ rules the request chain declares, which endpoints they leave open, which controls are
330
+ present but disabled, and which custom gates can be bypassed, each with the file and
331
+ line that says so.
332
+
333
+ **What it is not:** a vulnerability scanner. No value flows through a program here, so
334
+ an injection, a deserialization sink or a logic flaw inside a method body is not looked
335
+ for, and its absence from the report is not evidence (NC-001, below).
336
+
337
+ **Where it is strongest:** given a defect somebody else found — a scanner finding, a
338
+ line from a review — `ask impact <symbol>` and `ask risk` quantify what it reaches: the
339
+ endpoints, the transactional boundaries and the modules downstream of it, with the
340
+ confidence of each hop. That is the question a taint scanner does not answer.
325
341
 
326
342
  Published because a product that states its limits is not compared on breadth — it is
327
343
  compared on depth. Each row is emitted in the payload too (`non_coverage`), so an agent
@@ -429,6 +445,9 @@ Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
429
445
 
430
446
  ```bash
431
447
  ask config # version, config file path, telemetry status
448
+ ask config /repo # + the repository's own sourcecode.config.json:
449
+ # data labels, custom security annotations,
450
+ # and any declaration that could not be used
432
451
  ask telemetry enable # anonymous telemetry is OFF by default (opt-in)
433
452
  ```
434
453
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "4.10.6"
7
+ version = "4.11.0"
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__ = "4.10.6"
7
+ __version__ = "4.11.0"
@@ -336,10 +336,15 @@ def cache_dir(repo_root: Path) -> Path:
336
336
  def status(repo_root: Path) -> dict[str, Any]:
337
337
  """Return a stats dict describing the current cache state for *repo_root*.
338
338
 
339
- Keys: ``cache_dir``, ``cores``, ``views``, ``cas_blobs``,
339
+ Keys: ``cache_dir``, ``cached_cores``, ``views``, ``cas_blobs``,
340
340
  ``total_size_bytes``, ``total_size_mb``, ``ris_exists``, ``ris_git_head``,
341
341
  ``ris_last_updated_at``, ``ris_is_stale``, ``current_git_head``.
342
342
 
343
+ ``cached_cores`` counts ``core-*.json.gz`` entries in this cache. It was
344
+ named ``cores`` until 4.10.7, which is the field name a captured baseline
345
+ uses for the machine's CPU count (``env.cores``) — two different facts under
346
+ one name, on the same machine, minutes apart (C4-18).
347
+
343
348
  Note: ``snapshots`` is a legacy v1 field — always 0 in v2 (kept for
344
349
  backward compatibility; v2 writes ``core-*`` and ``view-*`` files only).
345
350
  """
@@ -377,7 +382,7 @@ def status(repo_root: Path) -> dict[str, Any]:
377
382
  if not cache_d.exists():
378
383
  return {
379
384
  "cache_dir": str(cache_d),
380
- "cores": 0, "snapshots": 0, "views": 0, "cas_blobs": 0,
385
+ "cached_cores": 0, "snapshots": 0, "views": 0, "cas_blobs": 0,
381
386
  "total_size_bytes": 0, "total_size_mb": 0.0,
382
387
  "current_git_head": current_head,
383
388
  "stores": _store_breakdown(repo_root, 0),
@@ -391,7 +396,7 @@ def status(repo_root: Path) -> dict[str, Any]:
391
396
  total_bytes = sum(f.stat().st_size for f in all_files if f.exists())
392
397
  return {
393
398
  "cache_dir": str(cache_d),
394
- "cores": len(cores),
399
+ "cached_cores": len(cores),
395
400
  "snapshots": len(snapshots),
396
401
  "views": len(views),
397
402
  "cas_blobs": len(cas_blobs),