lean-runtime 4.25.0__tar.gz → 4.26.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 (198) hide show
  1. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/CHANGELOG.md +10 -0
  2. {lean_runtime-4.25.0/lean_runtime.egg-info → lean_runtime-4.26.0}/PKG-INFO +1 -1
  3. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/runtime.py +17 -2
  4. {lean_runtime-4.25.0 → lean_runtime-4.26.0/lean_runtime.egg-info}/PKG-INFO +1 -1
  5. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/pyproject.toml +1 -1
  6. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_cli.py +37 -0
  7. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_runtime.py +65 -0
  8. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/LICENSE +0 -0
  9. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/MANIFEST.in +0 -0
  10. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/README.md +0 -0
  11. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/environments.toml +0 -0
  12. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/core-v4.32.2.lock.json +0 -0
  13. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/leancert-v4.30.0.5.lock.json +0 -0
  14. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/leancert-v4.31.0.lock.json +0 -0
  15. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/leancert-v4.32.2.4.lock.json +0 -0
  16. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/leancert-v4.33.0.lock.json +0 -0
  17. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/mathlib-v4.30.0.lock.json +0 -0
  18. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/mathlib-v4.31.0.lock.json +0 -0
  19. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/mathlib-v4.32.2.lock.json +0 -0
  20. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/mathlib-v4.33.0.lock.json +0 -0
  21. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/catalog/locks/mathlib-v4.33.1.lock.json +0 -0
  22. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/compatibility/README.md +0 -0
  23. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/compatibility/lake-artifact-cache-4.33.0.json +0 -0
  24. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/compatibility/mathlib-4.32.2.json +0 -0
  25. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/compatibility/mathlib-4.32.2.toml +0 -0
  26. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/compatibility/mathlib-4.33.0.json +0 -0
  27. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/compatibility/mathlib-4.33.0.toml +0 -0
  28. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/concepts/context-selection.md +0 -0
  29. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/index.md +0 -0
  30. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/reference/commands.md +0 -0
  31. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/reference/python-advanced.md +0 -0
  32. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/reference/python-api.md +0 -0
  33. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/reference/storage.md +0 -0
  34. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/trust.md +0 -0
  35. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/tutorial.md +0 -0
  36. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/workflows/check-files.md +0 -0
  37. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/docs/workflows/lake-projects.md +0 -0
  38. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/examples/mathlib.toml +0 -0
  39. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/__init__.py +0 -0
  40. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/__main__.py +0 -0
  41. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/_git.py +0 -0
  42. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/_paths.py +0 -0
  43. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/backends.py +0 -0
  44. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/bundles.py +0 -0
  45. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/capsules.py +0 -0
  46. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/cli.py +0 -0
  47. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/comparison.py +0 -0
  48. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/console.py +0 -0
  49. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/context_resolution.py +0 -0
  50. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/decisions.py +0 -0
  51. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/declaration_index.py +0 -0
  52. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/declaration_index_build.py +0 -0
  53. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/declaration_index_oci.py +0 -0
  54. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/diagnostics.py +0 -0
  55. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/__init__.py +0 -0
  56. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/analyzer.py +0 -0
  57. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/api.py +0 -0
  58. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/candidate.py +0 -0
  59. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/catalog.py +0 -0
  60. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/catalog_build.py +0 -0
  61. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/catalog_cli.py +0 -0
  62. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/catalog_manifest.py +0 -0
  63. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/data/catalog.json +0 -0
  64. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/defaults.py +0 -0
  65. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/engine.py +0 -0
  66. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/errors.py +0 -0
  67. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/history.py +0 -0
  68. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/memo.py +0 -0
  69. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/module_inventory.py +0 -0
  70. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/planner.py +0 -0
  71. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/policy.py +0 -0
  72. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/probe.py +0 -0
  73. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/py.typed +0 -0
  74. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/result.py +0 -0
  75. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/schema_resources.py +0 -0
  76. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/schemas/catalog-v1.schema.json +0 -0
  77. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/schemas/plan-v1.schema.json +0 -0
  78. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/discovery/schemas/result-v1.schema.json +0 -0
  79. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/environments.py +0 -0
  80. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/errors.py +0 -0
  81. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/events.py +0 -0
  82. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/facade.py +0 -0
  83. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/frontmatter.py +0 -0
  84. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/header_cache.py +0 -0
  85. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/health.py +0 -0
  86. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/identifier_resolver.py +0 -0
  87. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/import_syntax.py +0 -0
  88. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/lake.py +0 -0
  89. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/lake_cache.py +0 -0
  90. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/lockfiles.py +0 -0
  91. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/locking.py +0 -0
  92. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/matrix.py +0 -0
  93. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/models.py +0 -0
  94. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/oci.py +0 -0
  95. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/oci_protocol.py +0 -0
  96. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/packs.py +0 -0
  97. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/policies.py +0 -0
  98. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/profiling.py +0 -0
  99. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/programs.py +0 -0
  100. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/project_execution.py +0 -0
  101. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/project_sharing.py +0 -0
  102. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/projects.py +0 -0
  103. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/publisher_verification.py +0 -0
  104. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/py.typed +0 -0
  105. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/references.py +0 -0
  106. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/resolver.py +0 -0
  107. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/run_cli.py +0 -0
  108. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/schema_resources.py +0 -0
  109. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/serialization.py +0 -0
  110. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/shared_projects.py +0 -0
  111. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/specs.py +0 -0
  112. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/store.py +0 -0
  113. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/timings.py +0 -0
  114. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/toolchain_oci.py +0 -0
  115. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/toolchain_slim.py +0 -0
  116. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/toolchains.py +0 -0
  117. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/verification.py +0 -0
  118. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime/wire.py +0 -0
  119. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime.egg-info/SOURCES.txt +0 -0
  120. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime.egg-info/dependency_links.txt +0 -0
  121. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime.egg-info/entry_points.txt +0 -0
  122. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime.egg-info/requires.txt +0 -0
  123. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/lean_runtime.egg-info/top_level.txt +0 -0
  124. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/mkdocs.yml +0 -0
  125. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/attestation-v1.schema.json +0 -0
  126. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/check-batch-v1.schema.json +0 -0
  127. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/cleanup-v1.schema.json +0 -0
  128. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/comparison-v1.schema.json +0 -0
  129. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/execution-v1.schema.json +0 -0
  130. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/inspect-v1.schema.json +0 -0
  131. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/matrix-v1.schema.json +0 -0
  132. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/plan-v1.schema.json +0 -0
  133. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/profile-v1.schema.json +0 -0
  134. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/publication-v1.schema.json +0 -0
  135. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/status-v1.schema.json +0 -0
  136. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/schemas/verify-v1.schema.json +0 -0
  137. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/announcement_gate.py +0 -0
  138. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/catalog_update.py +0 -0
  139. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/lake_cache_gate.py +0 -0
  140. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/prepare_declaration_index.py +0 -0
  141. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/publish_declaration_index.py +0 -0
  142. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/registry_preflight.py +0 -0
  143. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/run_compatibility.py +0 -0
  144. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/run_v1_case_study.py +0 -0
  145. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/scripts/smoke_wheel.py +0 -0
  146. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/setup.cfg +0 -0
  147. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/conftest.py +0 -0
  148. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/e2e/test_real_discovery.py +0 -0
  149. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_analyzer.py +0 -0
  150. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_catalog.py +0 -0
  151. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_catalog_build.py +0 -0
  152. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_discovery_schema_resources.py +0 -0
  153. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_engine.py +0 -0
  154. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_memo.py +0 -0
  155. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_planner.py +0 -0
  156. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/discovery/test_policy.py +0 -0
  157. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_announcement_gate.py +0 -0
  158. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_backend.py +0 -0
  159. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_bundles.py +0 -0
  160. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_capsules.py +0 -0
  161. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_console.py +0 -0
  162. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_context_resolution.py +0 -0
  163. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_declaration_index.py +0 -0
  164. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_diagnostics.py +0 -0
  165. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_environment_integration.py +0 -0
  166. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_events_health.py +0 -0
  167. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_facade.py +0 -0
  168. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_frontmatter.py +0 -0
  169. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_git.py +0 -0
  170. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_header_cache.py +0 -0
  171. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_identifier_resolver.py +0 -0
  172. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_interactive.py +0 -0
  173. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_lake_cache.py +0 -0
  174. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_lockfiles.py +0 -0
  175. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_locking.py +0 -0
  176. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_models.py +0 -0
  177. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_multifile.py +0 -0
  178. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_oci_protocol.py +0 -0
  179. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_packs.py +0 -0
  180. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_paths.py +0 -0
  181. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_prebuilt_policy.py +0 -0
  182. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_programs.py +0 -0
  183. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_project_bootstrap.py +0 -0
  184. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_project_publish.py +0 -0
  185. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_projects.py +0 -0
  186. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_references.py +0 -0
  187. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_run_cli.py +0 -0
  188. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_schema_resources.py +0 -0
  189. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_schemas.py +0 -0
  190. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_signatures.py +0 -0
  191. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_specs.py +0 -0
  192. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_store.py +0 -0
  193. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_toolchain_oci.py +0 -0
  194. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_toolchain_slim.py +0 -0
  195. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_toolchains.py +0 -0
  196. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_v1_precision.py +0 -0
  197. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_verification_inventory.py +0 -0
  198. {lean_runtime-4.25.0 → lean_runtime-4.26.0}/tests/test_verification_probe.py +0 -0
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.26.0 - 2026-08-26
6
+
7
+ - Stop `status` claiming a download is required for core-only files. A lock
8
+ without packages runs straight on the toolchain and never materializes an
9
+ environment in the store, so readiness and cost are now judged by the
10
+ toolchain alone: `status` reports `environment ready locally` and
11
+ `Download none` once the toolchain is installed, and `status --probe`
12
+ prices it as zero instead of `unknown`. Previously the store directory that
13
+ `check` never creates kept the row at `not local · Download required`.
14
+
5
15
  ## 4.25.0 - 2026-08-26
6
16
 
7
17
  - Pin the Elan build that automatic bootstrap installs. Bootstrap now
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lean-runtime
3
- Version: 4.25.0
3
+ Version: 4.26.0
4
4
  Summary: Run Lean 4 proofs from Python or standalone files
5
5
  Author: Alejandro Radisic
6
6
  License-Expression: Apache-2.0
@@ -569,8 +569,14 @@ class Runtime:
569
569
  """Report what opening a lock would cost, without acquiring anything."""
570
570
  environment_id = environment_identity(lock, build_profile)
571
571
  destination = self.store.environment_path(environment_id)
572
- ready = destination.is_dir()
573
- sparse = (destination / "workspace" / ".lean-runtime" / "capsule.json").is_file()
572
+ # A lock without packages runs straight on the toolchain: no environment
573
+ # is ever materialized in the store, so only the toolchain can cost anything.
574
+ core_only = not lock.packages
575
+ ready = core_only or destination.is_dir()
576
+ sparse = (
577
+ not core_only
578
+ and (destination / "workspace" / ".lean-runtime" / "capsule.json").is_file()
579
+ )
574
580
  libraries: list[dict[str, Any]] = []
575
581
  environment_download: int | None = 0 if ready and not sparse else None
576
582
  if not ready or sparse:
@@ -659,6 +665,15 @@ class Runtime:
659
665
  ) -> bool:
660
666
  """Return whether a lock and import closure can check without acquisition."""
661
667
 
668
+ if not lock.packages:
669
+ # Core-only locks never touch the environment store; the toolchain is
670
+ # the whole environment. Do not call it ready for an external import,
671
+ # though: discovery uses this result for local-first ordering, and an
672
+ # installed core toolchain must not outrank the package that provides
673
+ # (for example) Mathlib.
674
+ core_roots = {"Init", "Lean", "Std"}
675
+ imports_are_core = all(module.split(".", 1)[0] in core_roots for module in import_roots)
676
+ return imports_are_core and self._toolchain_installed(lock.toolchain)
662
677
  environment_id = environment_identity(lock)
663
678
  if not self.store.environment_path(environment_id).is_dir():
664
679
  return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lean-runtime
3
- Version: 4.25.0
3
+ Version: 4.26.0
4
4
  Summary: Run Lean 4 proofs from Python or standalone files
5
5
  Author: Alejandro Radisic
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "lean-runtime"
7
- version = "4.25.0"
7
+ version = "4.26.0"
8
8
  description = "Run Lean 4 proofs from Python or standalone files"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -528,6 +528,43 @@ def test_standalone_status_reports_plan_not_selection_and_availability(
528
528
  assert data["probe"] is None
529
529
 
530
530
 
531
+ def test_core_only_status_needs_no_download_once_the_toolchain_is_installed(
532
+ tmp_path: Path, capsys: pytest.CaptureFixture[str], monkeypatch: pytest.MonkeyPatch
533
+ ) -> None:
534
+ # A core-only file never materializes a store environment, so status must
535
+ # judge it by the toolchain alone rather than by a store directory that
536
+ # `check` will never create.
537
+ source = tmp_path / "Core.lean"
538
+ source.write_text("example : True := by trivial\n")
539
+ monkeypatch.setattr("lean_runtime.cli.Runtime._toolchain_installed", lambda _self, _t: True)
540
+ assert main(["--home", str(tmp_path / "home"), "status", str(source)]) == 0
541
+ output = capsys.readouterr().out
542
+ assert "Imports none (core Lean only)" in output
543
+ assert "environment ready locally · toolchain installed" in output
544
+ assert "Download none: core-" in output
545
+ assert "required" not in output
546
+
547
+ assert main(["--home", str(tmp_path / "home"), "status", str(source), "--probe"]) == 0
548
+ output = capsys.readouterr().out
549
+ assert "Download none: environment and toolchain are already local" in output
550
+
551
+ assert main(["--home", str(tmp_path / "home"), "status", str(source), "--json"]) == 0
552
+ data = json.loads(capsys.readouterr().out)["data"]
553
+ assert data["availability"][data["planned_first"]]["local"] is True
554
+
555
+
556
+ def test_core_only_status_still_needs_the_toolchain_when_it_is_missing(
557
+ tmp_path: Path, capsys: pytest.CaptureFixture[str], monkeypatch: pytest.MonkeyPatch
558
+ ) -> None:
559
+ source = tmp_path / "Core.lean"
560
+ source.write_text("example : True := by trivial\n")
561
+ monkeypatch.setattr("lean_runtime.cli.Runtime._toolchain_installed", lambda _self, _t: False)
562
+ assert main(["--home", str(tmp_path / "home"), "status", str(source)]) == 0
563
+ output = capsys.readouterr().out
564
+ assert "environment not local · toolchain not installed" in output
565
+ assert "Download required for core-" in output
566
+
567
+
531
568
  def test_status_reports_unowned_file_beneath_declarative_project_as_standalone(
532
569
  tmp_path: Path, capsys: pytest.CaptureFixture[str]
533
570
  ) -> None:
@@ -274,3 +274,68 @@ def test_full_environment_build_installs_a_lake_capable_toolchain(tmp_path: Path
274
274
  environment = runtime.open_toolchain("v4.32.2")
275
275
  environment.build(("Demo",))
276
276
  assert toolchains.full_installs == ["leanprover/lean4:v4.32.2"]
277
+
278
+
279
+ class InstalledToolchains(FakeToolchains):
280
+ def __init__(self, home: Path, installed: str) -> None:
281
+ super().__init__(home)
282
+ self.installed = installed
283
+
284
+ def is_available_locally(self, toolchain: str) -> bool:
285
+ return toolchain == self.installed
286
+
287
+
288
+ def _core_lock(toolchain: str) -> EnvironmentLock:
289
+ return EnvironmentLock(
290
+ toolchain=toolchain,
291
+ spec_digest="spec_" + "c" * 64,
292
+ root_lakefile='name = "core"\n',
293
+ root_module="",
294
+ manifest={"packages": []},
295
+ packages=(),
296
+ )
297
+
298
+
299
+ def test_core_lock_is_ready_locally_once_its_toolchain_is_installed(tmp_path: Path) -> None:
300
+ # Core-only checks run straight on the toolchain and never materialize an
301
+ # environment in the store, so the store must not decide their readiness.
302
+ runtime = Runtime(
303
+ home=tmp_path / "home",
304
+ toolchains=InstalledToolchains(tmp_path, "leanprover/lean4:v4.32.2"), # type: ignore[arg-type]
305
+ libraries=[],
306
+ )
307
+ assert runtime.exact_ready_locally(_core_lock("leanprover/lean4:v4.32.2")) is True
308
+ assert (
309
+ runtime.exact_ready_locally(
310
+ _core_lock("leanprover/lean4:v4.32.2"), import_roots=("Lean.Elab", "Std.Data.HashMap")
311
+ )
312
+ is True
313
+ )
314
+ assert (
315
+ runtime.exact_ready_locally(
316
+ _core_lock("leanprover/lean4:v4.32.2"), import_roots=("Mathlib",)
317
+ )
318
+ is False
319
+ )
320
+ assert runtime.exact_ready_locally(_core_lock("leanprover/lean4:v4.31.0")) is False
321
+
322
+
323
+ def test_core_lock_plan_costs_nothing_once_its_toolchain_is_installed(tmp_path: Path) -> None:
324
+ runtime = Runtime(
325
+ home=tmp_path / "home",
326
+ toolchains=InstalledToolchains(tmp_path, "leanprover/lean4:v4.32.2"), # type: ignore[arg-type]
327
+ libraries=[],
328
+ )
329
+ plan = runtime.plan_exact(_core_lock("leanprover/lean4:v4.32.2"))
330
+ assert plan["environment_ready"] is True
331
+ assert plan["environment_download_bytes"] == 0
332
+ assert plan["toolchain_download_bytes"] == 0
333
+ assert plan["download_bytes"] == 0
334
+ assert plan["download_bytes_complete"] is True
335
+ assert plan["libraries"] == []
336
+
337
+ missing = runtime.plan_exact(_core_lock("leanprover/lean4:v4.31.0"))
338
+ assert missing["environment_ready"] is True
339
+ assert missing["environment_download_bytes"] == 0
340
+ assert missing["toolchain_installed"] is False
341
+ assert missing["download_bytes_complete"] is False
File without changes
File without changes
File without changes
File without changes
File without changes