sourcecode 5.5.6__tar.gz → 5.6.1__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 (360) hide show
  1. {sourcecode-5.5.6 → sourcecode-5.6.1}/CHANGELOG.md +12 -0
  2. {sourcecode-5.5.6 → sourcecode-5.6.1}/CONTRIBUTING.md +13 -2
  3. sourcecode-5.6.1/LICENSE +47 -0
  4. sourcecode-5.6.1/NOTICE +8 -0
  5. {sourcecode-5.5.6 → sourcecode-5.6.1}/PKG-INFO +13 -4
  6. {sourcecode-5.5.6 → sourcecode-5.6.1}/README.md +6 -2
  7. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/DEMO-5MIN.md +1 -1
  8. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/DEVELOPMENT-ROADMAP.md +14 -0
  9. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/MANUAL-USUARIO.md +4 -2
  10. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/PRODUCT_TIERS.md +1 -1
  11. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/RELEASE-CHECKLIST.md +3 -3
  12. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/USER_GUIDE.md +5 -2
  13. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/commercial-pipeline-audit.md +1 -1
  14. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/privacy.md +2 -1
  15. {sourcecode-5.5.6 → sourcecode-5.6.1}/pyproject.toml +12 -4
  16. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/__init__.py +1 -1
  17. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/cli.py +39 -28
  18. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/parse_cache.py +5 -0
  19. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/path_filters.py +2 -0
  20. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/phased_run.py +2 -1
  21. sourcecode-5.6.1/src/sourcecode/product_info.py +22 -0
  22. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/repository_ir.py +40 -0
  23. sourcecode-5.5.6/LICENSE +0 -186
  24. {sourcecode-5.5.6 → sourcecode-5.6.1}/.github/workflows/build-windows.yml +0 -0
  25. {sourcecode-5.5.6 → sourcecode-5.6.1}/.github/workflows/perf-gate.yml +0 -0
  26. {sourcecode-5.5.6 → sourcecode-5.6.1}/.gitignore +0 -0
  27. {sourcecode-5.5.6 → sourcecode-5.6.1}/.ruff.toml +0 -0
  28. {sourcecode-5.5.6 → sourcecode-5.6.1}/CLAUDE.md +0 -0
  29. {sourcecode-5.5.6 → sourcecode-5.6.1}/SECURITY.md +0 -0
  30. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/CACHE.md +0 -0
  31. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/COMMERCIAL-OFFER.md +0 -0
  32. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/CUSTOMER-VALIDATION.md +0 -0
  33. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/DEFECT-LEDGER.md +0 -0
  34. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/EXECUTION-PLAN-12MO.md +0 -0
  35. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/EXECUTIVE-ROADMAP.md +0 -0
  36. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/MODERNIZATION.md +0 -0
  37. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/PRODUCT_AUDIT.md +0 -0
  38. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/PRODUCT_IDENTITY.md +0 -0
  39. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/RC1-CHECKLIST.md +0 -0
  40. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
  41. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
  42. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
  43. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
  44. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
  45. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
  46. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
  47. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
  48. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
  49. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/EPV-p6-class-typeref.md +0 -0
  50. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
  51. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
  52. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
  53. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
  54. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0001-semantic-ir.md +0 -0
  55. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
  56. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
  57. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
  58. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
  59. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0006-performance-harness.md +0 -0
  60. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0007-composition-semantics.md +0 -0
  61. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/adr/0008-answer-coherence.md +0 -0
  62. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/consumer-disposition-inventory.md +0 -0
  63. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/overview.md +0 -0
  64. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/product-architecture-review.md +0 -0
  65. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/product-strategy-layering.md +0 -0
  66. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
  67. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/architecture/semantic-ir-roadmap.md +0 -0
  68. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/baseline-ci.yml +0 -0
  69. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/contracts-ci.yml +0 -0
  70. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/contracts.md +0 -0
  71. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
  72. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
  73. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
  74. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
  75. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
  76. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
  77. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
  78. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
  79. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/licensing-schema.md +0 -0
  80. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/migrate-check.md +0 -0
  81. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/README.md +0 -0
  82. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/REGRESSION-GATE.md +0 -0
  83. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
  84. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
  85. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
  86. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
  87. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
  88. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
  89. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
  90. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
  91. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
  92. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
  93. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
  94. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
  95. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
  96. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
  97. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
  98. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
  99. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
  100. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
  101. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
  102. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
  103. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
  104. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
  105. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
  106. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
  107. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
  108. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
  109. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
  110. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
  111. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
  112. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
  113. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
  114. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
  115. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
  116. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
  117. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
  118. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
  119. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
  120. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
  121. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
  122. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
  123. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
  124. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
  125. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/gate-latest/README.md +0 -0
  126. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
  127. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
  128. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
  129. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
  130. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
  131. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
  132. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/perf/baselines/reference-best/README.md +0 -0
  133. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/posture.md +0 -0
  134. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/pro-experience-audit.md +0 -0
  135. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/schema.md +0 -0
  136. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/spec/envelope-v1.md +0 -0
  137. {sourcecode-5.5.6 → sourcecode-5.6.1}/docs/spring-audit-ci.yml +0 -0
  138. {sourcecode-5.5.6 → sourcecode-5.6.1}/raw +0 -0
  139. {sourcecode-5.5.6 → sourcecode-5.6.1}/scripts/compare_integration_engines.py +0 -0
  140. {sourcecode-5.5.6 → sourcecode-5.6.1}/scripts/customer_smoke_test.sh +0 -0
  141. {sourcecode-5.5.6 → sourcecode-5.6.1}/scripts/generate_jdk_exports.py +0 -0
  142. {sourcecode-5.5.6 → sourcecode-5.6.1}/scripts/perf_gate.py +0 -0
  143. {sourcecode-5.5.6 → sourcecode-5.6.1}/scripts/perf_harness.py +0 -0
  144. {sourcecode-5.5.6 → sourcecode-5.6.1}/scripts/sync_gate_anchors.py +0 -0
  145. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/adaptive_scanner.py +0 -0
  146. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/archetype.py +0 -0
  147. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/architectural_baseline.py +0 -0
  148. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/architectural_delta.py +0 -0
  149. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/architecture_analyzer.py +0 -0
  150. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/architecture_summary.py +0 -0
  151. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/ast_extractor.py +0 -0
  152. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/audit_report.py +0 -0
  153. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/baseline_autocapture.py +0 -0
  154. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/bundled_docs.py +0 -0
  155. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/cache.py +0 -0
  156. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/cache_model.py +0 -0
  157. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/call_surface.py +0 -0
  158. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/caller_metrics.py +0 -0
  159. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/caller_reach.py +0 -0
  160. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/canonical_ir.py +0 -0
  161. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/chain_rules.py +0 -0
  162. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/change_plan.py +0 -0
  163. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/cir_graphs.py +0 -0
  164. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/classifier.py +0 -0
  165. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/client_calls.py +0 -0
  166. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/code_notes_analyzer.py +0 -0
  167. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/compare.py +0 -0
  168. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/confidence_analyzer.py +0 -0
  169. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/constraint_diff.py +0 -0
  170. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/consumer_join.py +0 -0
  171. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/container_wiring.py +0 -0
  172. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/context_cache.py +0 -0
  173. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/context_graph.py +0 -0
  174. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/context_scorer.py +0 -0
  175. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/context_summarizer.py +0 -0
  176. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/contract_diff.py +0 -0
  177. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/contract_init.py +0 -0
  178. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/contract_model.py +0 -0
  179. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/contract_pipeline.py +0 -0
  180. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/coverage_parser.py +0 -0
  181. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/data_exposure.py +0 -0
  182. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/data_labels.py +0 -0
  183. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/declarations.py +0 -0
  184. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/defect_identity.py +0 -0
  185. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/degradation.py +0 -0
  186. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/dependency_analyzer.py +0 -0
  187. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/deployment_prefix.py +0 -0
  188. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detach.py +0 -0
  189. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/__init__.py +0 -0
  190. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/base.py +0 -0
  191. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/csproj_parser.py +0 -0
  192. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/dart.py +0 -0
  193. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/dotnet.py +0 -0
  194. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/elixir.py +0 -0
  195. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/go.py +0 -0
  196. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/heuristic.py +0 -0
  197. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/hybrid.py +0 -0
  198. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/java.py +0 -0
  199. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/jvm_ext.py +0 -0
  200. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/nodejs.py +0 -0
  201. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/parsers.py +0 -0
  202. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/php.py +0 -0
  203. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/project.py +0 -0
  204. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/python.py +0 -0
  205. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/ruby.py +0 -0
  206. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/rust.py +0 -0
  207. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/systems.py +0 -0
  208. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/terraform.py +0 -0
  209. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/detectors/tooling.py +0 -0
  210. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/doc_analyzer.py +0 -0
  211. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/dynamic_argument_surface.py +0 -0
  212. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/endpoint_literals.py +0 -0
  213. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/endpoint_metrics.py +0 -0
  214. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/entrypoint_classifier.py +0 -0
  215. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/env_analyzer.py +0 -0
  216. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/envelope.py +0 -0
  217. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/environment_resolution.py +0 -0
  218. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/error_schema.py +0 -0
  219. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/evidence_provider.py +0 -0
  220. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/execution_plan.py +0 -0
  221. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/explain.py +0 -0
  222. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/facts/__init__.py +0 -0
  223. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/facts/registry.json +0 -0
  224. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/file_chunker.py +0 -0
  225. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/file_classifier.py +0 -0
  226. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/filter_surface.py +0 -0
  227. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/format_contract.py +0 -0
  228. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/fqn_utils.py +0 -0
  229. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/gate_anchors.py +0 -0
  230. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/git_analyzer.py +0 -0
  231. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/git_checkout.py +0 -0
  232. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/graph_analyzer.py +0 -0
  233. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/graph_evidence.py +0 -0
  234. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/hibernate_strat.py +0 -0
  235. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/identity_fallback.py +0 -0
  236. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/integration_coordinates.py +0 -0
  237. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/jdk_exports.py +0 -0
  238. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/license.py +0 -0
  239. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/manifest_cache.py +0 -0
  240. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/__init__.py +0 -0
  241. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/dependency_import.py +0 -0
  242. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  243. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  244. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  245. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  246. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  247. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/orchestrator.py +0 -0
  248. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/registry.py +0 -0
  249. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/runner.py +0 -0
  250. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp/server.py +0 -0
  251. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/mcp_nudge.py +0 -0
  252. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/metrics_analyzer.py +0 -0
  253. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/migrate_check.py +0 -0
  254. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/migration_blast.py +0 -0
  255. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/non_coverage.py +0 -0
  256. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/openapi_surface.py +0 -0
  257. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/openrewrite_recipe.py +0 -0
  258. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/output_budget.py +0 -0
  259. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/output_encoding.py +0 -0
  260. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/parallel.py +0 -0
  261. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/partial_contract.py +0 -0
  262. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/path_admission.py +0 -0
  263. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/perf.py +0 -0
  264. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/pipe_contract.py +0 -0
  265. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/posture.py +0 -0
  266. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/pr_comment_renderer.py +0 -0
  267. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/pr_impact.py +0 -0
  268. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/prepare_context.py +0 -0
  269. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/progress.py +0 -0
  270. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/provenance.py +0 -0
  271. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/ranking_engine.py +0 -0
  272. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/readiness_timeline.py +0 -0
  273. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/readonly.py +0 -0
  274. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/reconciliation.py +0 -0
  275. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/redactor.py +0 -0
  276. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/reference_facts.py +0 -0
  277. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/release_info.py +0 -0
  278. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/relevance_scorer.py +0 -0
  279. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/remedies.py +0 -0
  280. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/rename_refactor.py +0 -0
  281. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/repo_classifier.py +0 -0
  282. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/__init__.py +0 -0
  283. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/context.py +0 -0
  284. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/errors.py +0 -0
  285. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/executor.py +0 -0
  286. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/planner.py +0 -0
  287. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/query.py +0 -0
  288. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/request.py +0 -0
  289. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/resolution.py +0 -0
  290. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/result.py +0 -0
  291. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/retriever.py +0 -0
  292. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/runtime.py +0 -0
  293. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/steps.py +0 -0
  294. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
  295. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/steps_graph.py +0 -0
  296. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/steps_impact.py +0 -0
  297. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/steps_intf.py +0 -0
  298. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/steps_struct.py +0 -0
  299. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/retrieval/steps_txsec.py +0 -0
  300. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/ris.py +0 -0
  301. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/risk.py +0 -0
  302. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/rule_catalog.py +0 -0
  303. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/rule_pass.py +0 -0
  304. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/runs.py +0 -0
  305. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/runtime_classifier.py +0 -0
  306. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/sarif.py +0 -0
  307. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/scanner.py +0 -0
  308. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/schema.py +0 -0
  309. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
  310. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/security_chain.py +0 -0
  311. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/security_config.py +0 -0
  312. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/security_config_scan.py +0 -0
  313. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/security_posture.py +0 -0
  314. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/semantic_analyzer.py +0 -0
  315. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/semantic_impact_engine.py +0 -0
  316. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/semantic_integration_engine.py +0 -0
  317. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/semantic_services.py +0 -0
  318. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/serializer.py +0 -0
  319. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/servlet_surface.py +0 -0
  320. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/source_text.py +0 -0
  321. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_event_topology.py +0 -0
  322. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_findings.py +0 -0
  323. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_impact.py +0 -0
  324. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_model.py +0 -0
  325. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_profiles.py +0 -0
  326. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_properties.py +0 -0
  327. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_security_audit.py +0 -0
  328. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_semantic.py +0 -0
  329. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/spring_tx_analyzer.py +0 -0
  330. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/sql_taint.py +0 -0
  331. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/summarizer.py +0 -0
  332. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/target_admission.py +0 -0
  333. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/telemetry/__init__.py +0 -0
  334. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/telemetry/config.py +0 -0
  335. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/telemetry/consent.py +0 -0
  336. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/telemetry/events.py +0 -0
  337. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/telemetry/filters.py +0 -0
  338. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/telemetry/transport.py +0 -0
  339. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/test_gap_ranking.py +0 -0
  340. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/test_sources.py +0 -0
  341. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/text_input.py +0 -0
  342. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/timeline.py +0 -0
  343. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/token_estimate.py +0 -0
  344. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/tree_utils.py +0 -0
  345. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/type_usage_surface.py +0 -0
  346. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/validation_inference.py +0 -0
  347. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/validation_surface.py +0 -0
  348. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/verify_edit.py +0 -0
  349. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/verify_repo.py +0 -0
  350. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/verify_rules.py +0 -0
  351. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/version_check.py +0 -0
  352. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/waivers.py +0 -0
  353. {sourcecode-5.5.6 → sourcecode-5.6.1}/src/sourcecode/workspace.py +0 -0
  354. {sourcecode-5.5.6 → sourcecode-5.6.1}/supabase/functions/README.md +0 -0
  355. {sourcecode-5.5.6 → sourcecode-5.6.1}/supabase/functions/get-license/index.ts +0 -0
  356. {sourcecode-5.5.6 → sourcecode-5.6.1}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  357. {sourcecode-5.5.6 → sourcecode-5.6.1}/supabase/functions/telemetry/index.ts +0 -0
  358. {sourcecode-5.5.6 → sourcecode-5.6.1}/supabase/sql/license_event_ordering.sql +0 -0
  359. {sourcecode-5.5.6 → sourcecode-5.6.1}/supabase/sql/licensing_schema.sql +0 -0
  360. {sourcecode-5.5.6 → sourcecode-5.6.1}/supabase/sql/telemetry_events.sql +0 -0
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.6.0] — 2026-08-13
6
+
7
+ ### Legal And Provenance
8
+ - Began a prospective proprietary licensing model for ASK Engine. Releases up
9
+ to and including 5.5.6 remain Apache-2.0; this change does not revoke prior
10
+ grants.
11
+ - Added `NOTICE`, package authorship and proprietary license metadata, bundled
12
+ license notices, and explicit contribution IP terms.
13
+ - `ask version` now publishes product attribution, license identity and build
14
+ provenance fields. Release signing and legal review remain required before
15
+ third-party distribution.
16
+
5
17
  ## [5.5.6] — 2026-08-13
6
18
 
7
19
  ### Fixed
@@ -2,6 +2,14 @@
2
2
 
3
3
  Thank you for your interest in contributing. This document covers how to set up a development environment, run tests, and submit changes.
4
4
 
5
+ ## Intellectual Property
6
+
7
+ ASK Engine 5.6.0 and later are proprietary. Do not submit code, documentation,
8
+ or other materials unless a written contribution, assignment, or services
9
+ agreement with Dominique Haroun states the applicable intellectual-property
10
+ terms. A pull request, issue, or discussion alone does not assign rights or
11
+ create a license.
12
+
5
13
  ---
6
14
 
7
15
  ## Code of Conduct
@@ -20,7 +28,7 @@ This project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.
20
28
  ### Local setup
21
29
 
22
30
  ```bash
23
- git clone https://github.com/sourcecode-ai/sourcecode
31
+ git clone https://github.com/HarounDominique/sourcecode
24
32
  cd sourcecode
25
33
  pip install -e ".[dev]"
26
34
  ```
@@ -237,4 +245,7 @@ Features that add flags without clear agent-oriented use cases will be declined.
237
245
 
238
246
  ## License
239
247
 
240
- By submitting a contribution, you agree that it will be licensed under the [Apache 2.0 License](LICENSE).
248
+ ASK Engine 5.6.0 and later are proprietary. Review the [LICENSE](LICENSE),
249
+ [NOTICE](NOTICE), and the Intellectual Property section above before proposing
250
+ work. Contributions require a separate written agreement; a pull request does
251
+ not itself assign rights or grant a license.
@@ -0,0 +1,47 @@
1
+ ASK Engine Proprietary License
2
+ Version 1.0, effective 2026-08-13
3
+
4
+ Copyright (c) 2026 Dominique Haroun. All rights reserved.
5
+
6
+ 1. Scope
7
+
8
+ This license applies to ASK Engine version 5.6.1 and later, including its source
9
+ code, documentation, and distributed artifacts (the "Software"). It does not
10
+ alter the license of versions 5.5.6 and earlier, which were distributed under
11
+ the Apache License, Version 2.0. Grants made for those earlier versions remain
12
+ governed by their published license terms.
13
+
14
+ 2. No Implied Grant
15
+
16
+ Except under a separate written agreement signed by Dominique Haroun, no right
17
+ or license is granted to use, copy, modify, distribute, sublicense, sell,
18
+ reverse engineer, or create derivative works of the Software. Possession of a
19
+ copy, access to a repository, or access to a distributed artifact does not
20
+ create an implied license.
21
+
22
+ 3. Third-Party Materials
23
+
24
+ Third-party dependencies and materials included with the Software remain subject
25
+ to their own license terms. This license does not supersede those terms.
26
+
27
+ 4. Trademarks
28
+
29
+ "ASK Engine", "ASK", and associated marks are identifiers of the Software.
30
+ No trademark license is granted except as required to identify an unmodified,
31
+ lawfully obtained copy of the Software.
32
+
33
+ 5. No Warranty
34
+
35
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
36
+ IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE,
37
+ AND NON-INFRINGEMENT. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE COPYRIGHT
38
+ HOLDER SHALL NOT BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING
39
+ FROM OR IN CONNECTION WITH THE SOFTWARE.
40
+
41
+ 6. Contact
42
+
43
+ Commercial, evaluation, redistribution, and contribution terms require a
44
+ written agreement with Dominique Haroun.
45
+
46
+ This license text is an operational policy draft and must be reviewed by
47
+ qualified counsel before distribution to third parties.
@@ -0,0 +1,8 @@
1
+ ASK Engine
2
+ Copyright (c) 2026 Dominique Haroun. All rights reserved.
3
+
4
+ ASK Engine and its source code were originally created and developed by
5
+ Dominique Haroun.
6
+
7
+ This NOTICE applies to ASK Engine 5.6.1 and later. Earlier releases may carry
8
+ different license terms; see the license distributed with the applicable release.
@@ -1,13 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 5.5.6
3
+ Version: 5.6.1
4
4
  Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
5
+ Project-URL: Homepage, https://github.com/HarounDominique/sourcecode
6
+ Project-URL: Repository, https://github.com/HarounDominique/sourcecode
7
+ Author: Dominique Haroun
8
+ License: Proprietary; see LICENSE
5
9
  License-File: LICENSE
10
+ License-File: NOTICE
6
11
  Keywords: agents,ai,codebase,context,developer-tools,llm
7
12
  Classifier: Development Status :: 4 - Beta
8
13
  Classifier: Environment :: Console
9
14
  Classifier: Intended Audience :: Developers
10
- Classifier: License :: OSI Approved :: Apache Software License
15
+ Classifier: License :: Other/Proprietary License
11
16
  Classifier: Operating System :: OS Independent
12
17
  Classifier: Programming Language :: Python :: 3
13
18
  Classifier: Programming Language :: Python :: 3.9
@@ -42,9 +47,13 @@ Description-Content-Type: text/markdown
42
47
 
43
48
  **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
44
49
 
45
- ![Version](https://img.shields.io/badge/version-5.5.6-blue)
50
+ ![Version](https://img.shields.io/badge/version-5.6.1-blue)
46
51
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
47
52
 
53
+ Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.6.1 and
54
+ later are proprietary; see [LICENSE](LICENSE) and [NOTICE](NOTICE). Releases up
55
+ to and including 5.5.6 remain governed by their published Apache-2.0 terms.
56
+
48
57
  > **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
49
58
  > command still works as a deprecated alias (it prints a one-line notice and forwards to
50
59
  > `ask`) and remains the Python/PyPI package name for now. The authoritative version is
@@ -126,7 +135,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
126
135
  # pip / pipx
127
136
  pipx install sourcecode # or: pip install sourcecode
128
137
 
129
- ask version # ask 5.5.6 — and, on a build that has aged,
138
+ ask version # ask 5.6.1 — and, on a build that has aged,
130
139
  # how many releases have probably shipped since
131
140
  ```
132
141
 
@@ -4,9 +4,13 @@
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.5.6-blue)
7
+ ![Version](https://img.shields.io/badge/version-5.6.1-blue)
8
8
  ![Python](https://img.shields.io/badge/python-3.9%2B-green)
9
9
 
10
+ Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.6.1 and
11
+ later are proprietary; see [LICENSE](LICENSE) and [NOTICE](NOTICE). Releases up
12
+ to and including 5.5.6 remain governed by their published Apache-2.0 terms.
13
+
10
14
  > **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
11
15
  > command still works as a deprecated alias (it prints a one-line notice and forwards to
12
16
  > `ask`) and remains the Python/PyPI package name for now. The authoritative version is
@@ -88,7 +92,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
88
92
  # pip / pipx
89
93
  pipx install sourcecode # or: pip install sourcecode
90
94
 
91
- ask version # ask 5.5.6 — and, on a build that has aged,
95
+ ask version # ask 5.6.1 — and, on a build that has aged,
92
96
  # how many releases have probably shipped since
93
97
  ```
94
98
 
@@ -12,7 +12,7 @@ the same commits; exact counts drift as the upstream repos evolve.
12
12
 
13
13
  ```bash
14
14
  pip install sourcecode # or: brew install sourcecode
15
- ask version # 2.2.0
15
+ ask version # confirm the installed ASK Engine build
16
16
 
17
17
  # Two public enterprise Java repos
18
18
  git clone https://github.com/BroadleafCommerce/BroadleafCommerce
@@ -3,6 +3,20 @@
3
3
  *Chief-engineer development record. This is the internal, dev-facing counterpart to the
4
4
  customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
5
5
 
6
+ > **PHASE UPDATE 2026-08-14 (audit ASK Engine 5.5.6 corpus, published same day).
7
+ >** The latest field audit landed a tighter bug battery on the CLI surface and the
8
+ > endpoint census. The open items that matter for this round are now explicit in the
9
+ > work queue: **ASK-01** dynamic `OUTPUT_TOO_LARGE` hints that stop repeating flags
10
+ > already present, **ASK-02** endpoint coverage/gap reporting for functional WebFlux
11
+ > routes, **ASK-03** a single predictable output-budget policy, **ASK-05** parse-cache
12
+ > budget accounting that tells the truth about current overage, and **ASK-06**
13
+ > stderr-only provenance lines that break scripted captures. The UX-only items
14
+ > (**ASK-04**, **ASK-07**) stay tracked as follow-up work, not as this fix battery.
15
+ >
16
+ > **Fix order for this battery:** ASK-01 → ASK-02 → ASK-05 → ASK-06 → version bump.
17
+ > One commit per fix, no feature detours, and every change verified against a
18
+ > regression test before moving to the next row.
19
+
6
20
  > **PHASE UPDATE 2026-08-12 (audit #29 — the re-audit of 5.4.0, published the
7
21
  > same day, `age_days: 0`).** Same subject (`saint-server @ 3dde037`, branch
8
22
  > `banyan-v2`, 3 342 Java / 3 574 endpoints), same protocol (`ASK_READONLY=1` +
@@ -916,7 +916,8 @@ ask mcp remove # quita la integración de todos los clientes configurados
916
916
  ask activate SC-XXXX-XXXX-XXXX
917
917
  ```
918
918
 
919
- Valida la clave contra el servidor de licencias y la guarda en `~/.sourcecode/license.json`.
919
+ Valida la clave contra el servidor de licencias y la guarda en `~/.ask/license.json`.
920
+ Las instalaciones previas siguen pudiendo leerse desde `~/.sourcecode/license.json`.
920
921
  - `LICENSE_KEY` (obligatorio): tu clave Pro.
921
922
 
922
923
  ### `auth` — autenticación
@@ -946,7 +947,8 @@ respuesta produce esa ausencia (`answered: false`).
946
947
  ```bash
947
948
  ask version
948
949
  ```
949
- Muestra la versión y sale (equivalente a `ask --version`).
950
+ Muestra la versión, atribución, licencia y procedencia del build. `ask --version`
951
+ mantiene el alias breve de versión para compatibilidad.
950
952
 
951
953
  ### `telemetry` — telemetría anónima
952
954
 
@@ -27,7 +27,7 @@ product decision, not an oversight — see `is_large_repo()` in `license.py`.
27
27
 
28
28
  ---
29
29
 
30
- ## Free (Apache 2.0)
30
+ ## Free (proprietary distribution)
31
31
 
32
32
  **Every command, full power, on repos up to 500 Java source files. Local,
33
33
  single-repo, offline.**
@@ -64,7 +64,7 @@ Prerequisites: Supabase project + CLI (`supabase`), a Lemon Squeezy store, and t
64
64
  - [ ] `users.status` → `inactive`.
65
65
  - [ ] After the revalidation TTL (30 min; or point `SOURCECODE_SUPABASE_URL` at the live
66
66
  project to force a fresh check), run smoke **Section C**: the Pro command on the large
67
- repo exits **2** (access removed). `~/.sourcecode/license.json` is cleared.
67
+ repo exits **2** (access removed). `~/.ask/license.json` is cleared.
68
68
 
69
69
  ## 10. Turn the paywall ON (last step)
70
70
  - [ ] Only after 1–9 pass: set the default so Pro is enforced —
@@ -86,8 +86,8 @@ Decide **before** step 10:
86
86
  set the real `SOURCECODE_PURCHASE_URL` above.
87
87
  - [ ] **P1** — should `migrate-check` (the modernization buy-trigger) gate on large repos,
88
88
  or stay free lead-gen? *(open product decision)*
89
- - [x] **D1** — public brand unified to **ASK Engine** (CLI: `sourcecode`) (Increment #2.3).
90
- - [x] **D2** — version drift fixed; docs aligned to `1.73.0` (Increment #2.3).
89
+ - [x] **D1** — public brand unified to **ASK Engine** (CLI: `ask`; `sourcecode` is a deprecated alias).
90
+ - [x] **D2** — version claims are verified against the build by `tests/test_published_version_claims.py`.
91
91
 
92
92
  ## Rollback
93
93
  - [ ] Set `SOURCECODE_PRO_UNLOCK=1` (or revert the default) → everyone is Pro again;
@@ -136,7 +136,7 @@ pipx install sourcecode # isolated install, no venv needed
136
136
 
137
137
  # Verify
138
138
  ask version
139
- # ask 5.5.6
139
+ # ask 5.6.1
140
140
  ```
141
141
 
142
142
  Requires Python 3.9+.
@@ -157,7 +157,10 @@ On success:
157
157
  {"status": "activated", "plan": "pro", "features": ["impact", "review-pr", "fix-bug", "modernize", "generate-tests"]}
158
158
  ```
159
159
 
160
- License is cached in `~/.sourcecode/license.json` and re-validated every 24 hours. Works offline after first activation — network errors keep the cached state.
160
+ License is cached in `~/.ask/license.json` and re-validated every 24 hours.
161
+ The legacy `~/.sourcecode/license.json` location remains readable for existing
162
+ installations. Works offline after first activation — network errors keep the
163
+ cached state.
161
164
 
162
165
  ---
163
166
 
@@ -22,7 +22,7 @@ Estados: **[V]** implementado y validado · **[I]** implementado, no validado ·
22
22
  │ │
23
23
  ▼ │
24
24
  ask activate <key> ──POST /get-license──► supabase/functions/get-license ────┘
25
- │ escribe ~/.sourcecode/license.json (0600)
25
+ │ escribe ~/.ask/license.json (0600; ~/.sourcecode sigue siendo legado de lectura)
26
26
 
27
27
  Comandos Pro ──gates──► require_repo_or_pro / require_feature / check_delta_free_tier
28
28
  │ revalidación cada 30 min (24 h en CI); offline-first
@@ -29,7 +29,8 @@ Precedence, highest first:
29
29
 
30
30
  ## Why telemetry exists
31
31
 
32
- `sourcecode` is an open source tool with no usage visibility by default. Anonymous telemetry helps answer questions like:
32
+ ASK Engine is a local analysis tool with no usage visibility by default.
33
+ Anonymous telemetry helps answer questions like:
33
34
 
34
35
  - Which commands do developers actually use?
35
36
  - What flag combinations are common?
@@ -4,18 +4,19 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "5.5.6"
7
+ version = "5.6.1"
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"
11
- license-expression = "Apache-2.0"
12
- license-files = ["LICENSE"]
11
+ license = { text = "Proprietary; see LICENSE" }
12
+ license-files = ["LICENSE", "NOTICE"]
13
+ authors = [{ name = "Dominique Haroun" }]
13
14
  keywords = ["ai", "llm", "agents", "context", "codebase", "developer-tools"]
14
15
  classifiers = [
15
16
  "Development Status :: 4 - Beta",
16
17
  "Environment :: Console",
17
18
  "Intended Audience :: Developers",
18
- "License :: OSI Approved :: Apache Software License",
19
+ "License :: Other/Proprietary License",
19
20
  "Operating System :: OS Independent",
20
21
  "Programming Language :: Python :: 3",
21
22
  "Programming Language :: Python :: 3.9",
@@ -25,6 +26,7 @@ classifiers = [
25
26
  "Topic :: Software Development :: Libraries :: Python Modules",
26
27
  "Topic :: Utilities",
27
28
  ]
29
+
28
30
  dependencies = [
29
31
  "typer>=0.24",
30
32
  "pathspec>=1.0",
@@ -34,6 +36,10 @@ dependencies = [
34
36
  "defusedxml>=0.7",
35
37
  ]
36
38
 
39
+ [project.urls]
40
+ Homepage = "https://github.com/HarounDominique/sourcecode"
41
+ Repository = "https://github.com/HarounDominique/sourcecode"
42
+
37
43
  [project.scripts]
38
44
  ask = "sourcecode.cli:main_entry"
39
45
  sourcecode = "sourcecode.cli:main_entry" # deprecated compat alias — removed in a future major
@@ -78,6 +84,8 @@ packages = ["src/sourcecode"]
78
84
  [tool.hatch.build.targets.wheel.force-include]
79
85
  "docs/USER_GUIDE.md" = "sourcecode/_docs/USER_GUIDE.md"
80
86
  "docs/DEFECT-LEDGER.md" = "sourcecode/_docs/DEFECT-LEDGER.md"
87
+ "LICENSE" = "sourcecode/_docs/LICENSE"
88
+ "NOTICE" = "sourcecode/_docs/NOTICE"
81
89
 
82
90
  [tool.pytest.ini_options]
83
91
  testpaths = ["tests"]
@@ -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.5.6"
7
+ __version__ = "5.6.1"
@@ -1392,6 +1392,23 @@ def _analysis_budget(command: str) -> dict[str, Any]:
1392
1392
  }
1393
1393
 
1394
1394
 
1395
+ def _migrate_check_output_hint(*, compact: bool, min_severity: str) -> str:
1396
+ """Build the output-size hint from the flags the caller already used."""
1397
+ ways_out: list[str] = []
1398
+ if not compact:
1399
+ ways_out.append("--compact (bounded decision summary, same report)")
1400
+ if min_severity != "high":
1401
+ ways_out.append("--min-severity high to drop low-severity findings")
1402
+ ways_out.append("--output FILE to save to disk")
1403
+ ways_out.append("--force to bypass this guard")
1404
+ prefix = (
1405
+ "No smaller inline variant is available with the current flags; "
1406
+ if compact and min_severity == "high"
1407
+ else "Use "
1408
+ )
1409
+ return prefix + ", ".join(ways_out) + "."
1410
+
1411
+
1395
1412
  def _budget_evidence(command: str, path: "Optional[Path]") -> "tuple[Optional[str], Optional[str]]":
1396
1413
  """(measured anchors for this command, size of this repository) — or Nones.
1397
1414
 
@@ -1439,6 +1456,8 @@ def _enforce_analysis_budget(
1439
1456
  return
1440
1457
  source = budget.get("configured_source")
1441
1458
  from sourcecode.phased_run import budget_provenance, budget_warning
1459
+ if not getattr(sys.stderr, "isatty", lambda: False)():
1460
+ return
1442
1461
 
1443
1462
  if float(configured) >= recommended:
1444
1463
  # C3-83: over the floor there is no advice to give, and there is still a
@@ -9250,6 +9269,7 @@ def spring_audit_cmd(
9250
9269
  _ris_sa(target, data)
9251
9270
  except Exception:
9252
9271
  pass
9272
+ output = _serialize_dict(data, format)
9253
9273
  finally:
9254
9274
  # C3-54: `done` must not claim the answer exists before it does. The
9255
9275
  # field log showed `[ask] done (6.8m)` printed, then the process torn
@@ -9265,21 +9285,6 @@ def spring_audit_cmd(
9265
9285
  )
9266
9286
  elif format == "github-comment":
9267
9287
  output = _render_spring_audit_github_comment(combined, min_severity)
9268
- else:
9269
- _full_data = combined.to_dict()
9270
- _bounded_default = (
9271
- not compact and output_path is None and format == "json" and not table
9272
- and len(_json.dumps(_full_data, ensure_ascii=False).encode("utf-8")) > 50_000
9273
- )
9274
- data = combined.to_compact_dict() if compact or _bounded_default else _full_data
9275
- if _bounded_default:
9276
- data.pop("mode", None)
9277
- data["default_output"] = "bounded"
9278
- data.pop("compact_note", None)
9279
- data["stdout_budget_note"] = (
9280
- "Capped by the stdout payload budget; use --output <file> for the complete report."
9281
- )
9282
- output = _serialize_dict(data, format)
9283
9288
 
9284
9289
  # F-AV: our own readers ask for the count under either spelling — the break
9285
9290
  # is meant for a consumer that never asked whether the run finished.
@@ -11197,11 +11202,7 @@ def migrate_check_cmd(
11197
11202
  "OUTPUT_TOO_LARGE",
11198
11203
  f"Estimated output is ~{_mig_tokens_est // 1000}K tokens — too large for "
11199
11204
  "most LLM context windows.",
11200
- hint=(
11201
- "Use --compact (bounded decision summary, same report), "
11202
- "--min-severity high to drop low-severity findings, "
11203
- "--output FILE to save to disk, or --force to bypass this guard."
11204
- ),
11205
+ hint=_migrate_check_output_hint(compact=compact, min_severity=min_severity),
11205
11206
  expected="Output under 50K estimated tokens.",
11206
11207
  )
11207
11208
  raise typer.Exit(1)
@@ -12701,17 +12702,18 @@ def version_cmd(
12701
12702
  copy: bool = _copy_option(),
12702
12703
  output_path: Optional[Path] = _output_option(),
12703
12704
  ) -> None:
12704
- """Show version and exit.
12705
+ """Show version, attribution, license and build provenance.
12705
12706
 
12706
12707
  Outputs human-readable text on interactive terminals.
12707
12708
  Outputs structured JSON on non-TTY (MCP, pipes, scripts):
12708
12709
  {"cli_version": "1.33.11", "mcp_schema_version": "1.33.11",
12709
- "compatibility_schema_version": "1.0"}
12710
+ "compatibility_schema_version": "1.0", "provenance": {...}}
12710
12711
  """
12711
12712
  from sourcecode.release_info import advisory_line, build_status
12713
+ from sourcecode.product_info import COPYRIGHT, PRODUCT, TAGLINE, build_provenance
12712
12714
 
12713
12715
  if getattr(sys.stdout, "isatty", lambda: False)():
12714
- _lines = [f"ask {__version__}"]
12716
+ _lines = [f"{PRODUCT} {__version__}", TAGLINE, COPYRIGHT]
12715
12717
  # C4-12: the field audits builds that are days old and many releases
12716
12718
  # behind, and nothing said so. Printed only when it applies — an advisory
12717
12719
  # on every run is one nobody reads.
@@ -12738,6 +12740,7 @@ def version_cmd(
12738
12740
  # Same list `ask schema` prints, so the two surfaces cannot disagree
12739
12741
  # about what this release publishes.
12740
12742
  "registries": ["facts-v1"],
12743
+ "provenance": build_provenance(),
12741
12744
  }, ensure_ascii=_json_ensure_ascii()), copy, output_path)
12742
12745
 
12743
12746
 
@@ -14240,12 +14243,20 @@ def cache_status_cmd(
14240
14243
  if "budget_bytes" in _store:
14241
14244
  _budget_mb = _store.get("budget_mb")
14242
14245
  _env = _store.get("budget_env")
14246
+ _over_by = _store.get("over_budget_by_mb")
14247
+ _current_mb = _store.get("current_mb")
14243
14248
  if _store.get("budget_bytes"):
14244
- _over = " — OVER, the next write evicts" if _store.get("over_budget") else ""
14245
- _answer.say(
14246
- f"{'':<13}budget {_budget_mb} MB, {_store.get('policy')} "
14247
- f"(${_env}){_over}"
14248
- )
14249
+ if _store.get("over_budget"):
14250
+ _answer.say(
14251
+ f"{'':<13}budget {_budget_mb} MB, {_store.get('policy')} "
14252
+ f"(${_env}); current {_current_mb} MB, over by {_over_by} MB "
14253
+ "— the next write evicts"
14254
+ )
14255
+ else:
14256
+ _answer.say(
14257
+ f"{'':<13}budget {_budget_mb} MB, {_store.get('policy')} "
14258
+ f"(${_env})"
14259
+ )
14249
14260
  else:
14250
14261
  _answer.say(f"{'':<13}{_store.get('policy')} (${_env})")
14251
14262
  # RIS section
@@ -440,6 +440,11 @@ def store_stats() -> "dict[str, object]":
440
440
  **_budget,
441
441
  "over_budget": bool(_limit) and total > _limit,
442
442
  }
443
+ if _limit:
444
+ out["over_budget_by_mb"] = round(
445
+ max(0, total - _limit) / (1024 * 1024), 2
446
+ )
447
+ out["current_mb"] = round(total / (1024 * 1024), 2)
443
448
  _stale = [g for g in generations if not g["current"]]
444
449
  if _stale:
445
450
  out["stale_entries"] = sum(int(g["entries"]) for g in _stale)
@@ -183,6 +183,8 @@ def is_test_fixture_module_path(path: str) -> bool:
183
183
  bare = part.rstrip("/")
184
184
  if bare in _TEST_MODULE_SEGMENTS:
185
185
  return True
186
+ if bare.endswith(("-test", "-tests", "-it", "-itest", "-itests")):
187
+ return True
186
188
  if bare.endswith(_TEST_INFRA_SUFFIXES):
187
189
  return True
188
190
  toks = bare.replace("_", "-").split("-")
@@ -41,6 +41,7 @@ from __future__ import annotations
41
41
  import hashlib
42
42
  import json
43
43
  import os
44
+ import tempfile
44
45
  import time
45
46
  from dataclasses import dataclass, field
46
47
  from pathlib import Path
@@ -71,7 +72,7 @@ def partials_dir(root: Path) -> Path:
71
72
  except Exception:
72
73
  key_source = str(Path(root).absolute())
73
74
  key = hashlib.sha256(key_source.encode("utf-8", errors="replace")).hexdigest()[:16]
74
- return Path.home() / ".sourcecode" / "partials" / key
75
+ return Path(tempfile.gettempdir()) / "sourcecode" / "partials" / key
75
76
 
76
77
 
77
78
  @dataclass
@@ -0,0 +1,22 @@
1
+ """Product identity and build provenance for official ASK Engine artifacts."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ PRODUCT = "ASK Engine"
8
+ TAGLINE = "Actionable Software Knowledge Engine"
9
+ COPYRIGHT = "Copyright (c) 2026 Dominique Haroun. All rights reserved."
10
+ PUBLISHER = "Dominique Haroun"
11
+ LICENSE_ID = "LicenseRef-ASK-Proprietary"
12
+
13
+
14
+ def build_provenance() -> dict[str, str]:
15
+ """Return build facts without discovering state from the user's repository."""
16
+ return {
17
+ "product": PRODUCT,
18
+ "publisher": PUBLISHER,
19
+ "license": LICENSE_ID,
20
+ "distribution": os.environ.get("ASK_DISTRIBUTION", "official"),
21
+ "build_commit": os.environ.get("ASK_BUILD_COMMIT", "unrecorded"),
22
+ }
@@ -7120,6 +7120,46 @@ def extract_java_endpoints(
7120
7120
  f"still expose an HTTP surface — verify manually before concluding the "
7121
7121
  f"service has no public API."
7122
7122
  )
7123
+
7124
+ result["coverage"] = {
7125
+ "detected_styles": {
7126
+ "spring_mvc_annotations": sum(1 for e in endpoints if e.get("source") == "annotation"),
7127
+ "xml_mapped": sum(1 for e in endpoints if e.get("source") == "xml_mapped"),
7128
+ "router_dsl": sum(1 for e in endpoints if e.get("source") == "router_dsl"),
7129
+ "openapi_spec": len(_spec_endpoints),
7130
+ "webflux_functional": len(_fn_route_files),
7131
+ "jax_rs": sum(1 for r in routes if r.get("framework") == "jax_rs"),
7132
+ "webscripts": _nonspring["webscripts"],
7133
+ "servlets": _nonspring["servlets"],
7134
+ },
7135
+ "supported_styles": {
7136
+ "spring_mvc_annotations": True,
7137
+ "xml_mapped": True,
7138
+ "router_dsl": True,
7139
+ "openapi_spec": True,
7140
+ "jax_rs": True,
7141
+ "webflux_functional": False,
7142
+ "webscripts": False,
7143
+ "servlets": False,
7144
+ },
7145
+ "gaps": [
7146
+ *(
7147
+ [f"webflux_functional: {len(_fn_route_files)} files"]
7148
+ if _fn_route_count
7149
+ else []
7150
+ ),
7151
+ *(
7152
+ [f"webscripts: {_nonspring['webscripts']} files"]
7153
+ if _nonspring["webscripts"]
7154
+ else []
7155
+ ),
7156
+ *(
7157
+ [f"servlets: {_nonspring['servlets']} declarations"]
7158
+ if _nonspring["servlets"]
7159
+ else []
7160
+ ),
7161
+ ],
7162
+ }
7123
7163
  return result
7124
7164
 
7125
7165