lean-runtime 4.1.0__tar.gz → 4.2.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 (194) hide show
  1. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/CHANGELOG.md +40 -0
  2. {lean_runtime-4.1.0/lean_runtime.egg-info → lean_runtime-4.2.0}/PKG-INFO +18 -15
  3. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/README.md +17 -14
  4. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/environments.toml +9 -1
  5. lean_runtime-4.2.0/catalog/locks/mathlib-v4.33.1.lock.json +244 -0
  6. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/reference/commands.md +4 -1
  7. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/tutorial.md +1 -1
  8. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/workflows/check-files.md +9 -1
  9. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/cli.py +164 -17
  10. lean_runtime-4.2.0/lean_runtime/declaration_index.py +352 -0
  11. lean_runtime-4.2.0/lean_runtime/declaration_index_build.py +348 -0
  12. lean_runtime-4.2.0/lean_runtime/declaration_index_oci.py +407 -0
  13. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/api.py +43 -1
  14. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/catalog_build.py +40 -3
  15. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/catalog_cli.py +4 -0
  16. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/data/catalog.json +1 -1
  17. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/probe.py +1 -0
  18. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/environments.py +28 -2
  19. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/run_cli.py +11 -3
  20. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/runtime.py +82 -0
  21. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/store.py +95 -0
  22. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/toolchains.py +8 -0
  23. {lean_runtime-4.1.0 → lean_runtime-4.2.0/lean_runtime.egg-info}/PKG-INFO +18 -15
  24. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime.egg-info/SOURCES.txt +8 -0
  25. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/pyproject.toml +1 -1
  26. lean_runtime-4.2.0/scripts/catalog_update.py +141 -0
  27. lean_runtime-4.2.0/scripts/prepare_declaration_index.py +119 -0
  28. lean_runtime-4.2.0/scripts/publish_declaration_index.py +37 -0
  29. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/scripts/registry_preflight.py +136 -4
  30. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_catalog_build.py +41 -0
  31. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_engine.py +89 -3
  32. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_planner.py +2 -2
  33. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_capsules.py +7 -1
  34. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_cli.py +2 -0
  35. lean_runtime-4.2.0/tests/test_declaration_index.py +404 -0
  36. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_projects.py +9 -9
  37. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_run_cli.py +26 -1
  38. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/LICENSE +0 -0
  39. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/MANIFEST.in +0 -0
  40. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/core-v4.32.2.lock.json +0 -0
  41. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/leancert-v4.30.0.5.lock.json +0 -0
  42. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/leancert-v4.31.0.lock.json +0 -0
  43. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/leancert-v4.32.2.4.lock.json +0 -0
  44. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/leancert-v4.33.0.lock.json +0 -0
  45. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/mathlib-v4.30.0.lock.json +0 -0
  46. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/mathlib-v4.31.0.lock.json +0 -0
  47. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/mathlib-v4.32.2.lock.json +0 -0
  48. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/catalog/locks/mathlib-v4.33.0.lock.json +0 -0
  49. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/compatibility/README.md +0 -0
  50. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/compatibility/lake-artifact-cache-4.33.0.json +0 -0
  51. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/compatibility/mathlib-4.32.2.json +0 -0
  52. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/compatibility/mathlib-4.32.2.toml +0 -0
  53. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/compatibility/mathlib-4.33.0.json +0 -0
  54. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/compatibility/mathlib-4.33.0.toml +0 -0
  55. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/concepts/context-selection.md +0 -0
  56. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/index.md +0 -0
  57. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/reference/python-api.md +0 -0
  58. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/trust.md +0 -0
  59. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/docs/workflows/lake-projects.md +0 -0
  60. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/examples/mathlib.toml +0 -0
  61. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/__init__.py +0 -0
  62. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/__main__.py +0 -0
  63. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/_git.py +0 -0
  64. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/_paths.py +0 -0
  65. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/backends.py +0 -0
  66. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/bundles.py +0 -0
  67. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/capsules.py +0 -0
  68. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/comparison.py +0 -0
  69. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/console.py +0 -0
  70. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/context_resolution.py +0 -0
  71. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/decisions.py +0 -0
  72. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/diagnostics.py +0 -0
  73. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/__init__.py +0 -0
  74. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/analyzer.py +0 -0
  75. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/candidate.py +0 -0
  76. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/catalog.py +0 -0
  77. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/catalog_manifest.py +0 -0
  78. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/defaults.py +0 -0
  79. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/engine.py +0 -0
  80. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/errors.py +0 -0
  81. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/history.py +0 -0
  82. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/memo.py +0 -0
  83. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/module_inventory.py +0 -0
  84. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/planner.py +0 -0
  85. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/policy.py +0 -0
  86. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/py.typed +0 -0
  87. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/result.py +0 -0
  88. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/schema_resources.py +0 -0
  89. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/schemas/catalog-v1.schema.json +0 -0
  90. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/schemas/plan-v1.schema.json +0 -0
  91. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/discovery/schemas/result-v1.schema.json +0 -0
  92. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/errors.py +0 -0
  93. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/events.py +0 -0
  94. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/facade.py +0 -0
  95. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/frontmatter.py +0 -0
  96. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/header_cache.py +0 -0
  97. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/health.py +0 -0
  98. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/identifier_resolver.py +0 -0
  99. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/import_syntax.py +0 -0
  100. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/lake.py +0 -0
  101. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/lake_cache.py +0 -0
  102. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/lockfiles.py +0 -0
  103. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/locking.py +0 -0
  104. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/matrix.py +0 -0
  105. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/models.py +0 -0
  106. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/oci.py +0 -0
  107. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/oci_protocol.py +0 -0
  108. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/packs.py +0 -0
  109. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/policies.py +0 -0
  110. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/profiling.py +0 -0
  111. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/programs.py +0 -0
  112. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/project_execution.py +0 -0
  113. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/project_sharing.py +0 -0
  114. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/projects.py +0 -0
  115. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/publisher_verification.py +0 -0
  116. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/py.typed +0 -0
  117. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/references.py +0 -0
  118. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/resolver.py +0 -0
  119. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/schema_resources.py +0 -0
  120. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/serialization.py +0 -0
  121. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/shared_projects.py +0 -0
  122. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/specs.py +0 -0
  123. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/timings.py +0 -0
  124. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/toolchain_oci.py +0 -0
  125. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/toolchain_slim.py +0 -0
  126. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/verification.py +0 -0
  127. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime/wire.py +0 -0
  128. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime.egg-info/dependency_links.txt +0 -0
  129. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime.egg-info/entry_points.txt +0 -0
  130. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime.egg-info/requires.txt +0 -0
  131. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/lean_runtime.egg-info/top_level.txt +0 -0
  132. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/mkdocs.yml +0 -0
  133. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/attestation-v1.schema.json +0 -0
  134. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/check-batch-v1.schema.json +0 -0
  135. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/cleanup-v1.schema.json +0 -0
  136. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/comparison-v1.schema.json +0 -0
  137. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/execution-v1.schema.json +0 -0
  138. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/inspect-v1.schema.json +0 -0
  139. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/matrix-v1.schema.json +0 -0
  140. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/plan-v1.schema.json +0 -0
  141. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/profile-v1.schema.json +0 -0
  142. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/publication-v1.schema.json +0 -0
  143. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/schemas/verify-v1.schema.json +0 -0
  144. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/scripts/announcement_gate.py +0 -0
  145. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/scripts/lake_cache_gate.py +0 -0
  146. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/scripts/run_compatibility.py +0 -0
  147. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/scripts/run_v1_case_study.py +0 -0
  148. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/scripts/smoke_wheel.py +0 -0
  149. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/setup.cfg +0 -0
  150. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/conftest.py +0 -0
  151. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/e2e/test_real_discovery.py +0 -0
  152. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_analyzer.py +0 -0
  153. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_catalog.py +0 -0
  154. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_discovery_schema_resources.py +0 -0
  155. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_memo.py +0 -0
  156. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/discovery/test_policy.py +0 -0
  157. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_announcement_gate.py +0 -0
  158. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_backend.py +0 -0
  159. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_bundles.py +0 -0
  160. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_console.py +0 -0
  161. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_context_resolution.py +0 -0
  162. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_diagnostics.py +0 -0
  163. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_environment_integration.py +0 -0
  164. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_events_health.py +0 -0
  165. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_facade.py +0 -0
  166. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_frontmatter.py +0 -0
  167. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_git.py +0 -0
  168. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_header_cache.py +0 -0
  169. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_identifier_resolver.py +0 -0
  170. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_interactive.py +0 -0
  171. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_lake_cache.py +0 -0
  172. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_lockfiles.py +0 -0
  173. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_locking.py +0 -0
  174. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_models.py +0 -0
  175. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_multifile.py +0 -0
  176. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_oci_protocol.py +0 -0
  177. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_packs.py +0 -0
  178. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_paths.py +0 -0
  179. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_prebuilt_policy.py +0 -0
  180. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_programs.py +0 -0
  181. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_project_publish.py +0 -0
  182. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_references.py +0 -0
  183. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_runtime.py +0 -0
  184. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_schema_resources.py +0 -0
  185. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_schemas.py +0 -0
  186. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_signatures.py +0 -0
  187. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_specs.py +0 -0
  188. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_store.py +0 -0
  189. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_toolchain_oci.py +0 -0
  190. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_toolchain_slim.py +0 -0
  191. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_toolchains.py +0 -0
  192. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_v1_precision.py +0 -0
  193. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_verification_inventory.py +0 -0
  194. {lean_runtime-4.1.0 → lean_runtime-4.2.0}/tests/test_verification_probe.py +0 -0
@@ -2,6 +2,46 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.2.0 - 2026-08-23
6
+
7
+ - Add a scheduled catalog-update workflow that detects a new stable Mathlib
8
+ release, freezes its exact lock, rebuilds the bundled catalog, and opens a
9
+ pull request.
10
+ - Add `catalog build --previous`, which reuses module inventories from a
11
+ prior catalog for entries whose locks are unchanged, so incremental
12
+ rebuilds only materialize new or changed sources.
13
+ - Add digest-pinned, per-package declaration-index shards generated from
14
+ public `.ilean` files during catalog publication. Rejected standalone
15
+ checks can lazily fetch only the relevant shard and report the module that
16
+ defines an unknown name; retained shards remain available offline and are
17
+ reused across environments with the same source and toolchain.
18
+
19
+ ## 4.1.1 - 2026-08-21
20
+
21
+ - Escape source stems that are not plain Lean identifiers when rendering
22
+ check setups, so files such as `with space.lean` check correctly inside
23
+ acquired environments.
24
+ - Report a hit `--timeout` as `timed out` with exit 2 instead of presenting
25
+ it as a Lean rejection with exit 1, and document the classification.
26
+ - Say `--using` in the frontmatter conflict message instead of the removed
27
+ `--with` spelling.
28
+ - Re-measure the README and landing-page example timings against this
29
+ machine's warm store and narrow the README hero import to
30
+ `Mathlib.Tactic.NormNum`.
31
+ - Accept the `lean:vX.Y.Z` shorthand under the explicit `toolchain:` context
32
+ prefix instead of passing the raw string to Elan.
33
+ - Exit 2 when a guided mutation (`new`, `adopt`, `update`, `publish`,
34
+ `project unshare`) needs confirmation but cannot prompt; interactive
35
+ declines still exit 0.
36
+ - Rewrite staged scratch paths to the submitted file names in multi-file
37
+ check diagnostics, matching single-file output.
38
+ - Render standalone `status` imports, candidates, and availability as
39
+ aligned text instead of Python reprs.
40
+ - Hint at `lean-runtime check -` when a project-wide check finds no pinned
41
+ project and stdin is redirected, and document the stdin spelling.
42
+ - Document that a project context applies to files inside the project root,
43
+ and list `replay` and `completion` in the README command summary.
44
+
5
45
  ## 4.1.0 - 2026-08-19
6
46
 
7
47
  ## 4.0.1 - 2026-08-18
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lean-runtime
3
- Version: 4.1.0
3
+ Version: 4.2.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
@@ -46,14 +46,14 @@ Give Lean Runtime an ordinary file:
46
46
 
47
47
  ```lean
48
48
  -- Main.lean
49
- import Mathlib
49
+ import Mathlib.Tactic.NormNum
50
50
 
51
51
  example : 2 + 2 = 4 := by norm_num
52
52
  ```
53
53
 
54
54
  ```console
55
55
  $ lean-runtime check Main.lean
56
- ✓ Main.lean accepted in 1.60s
56
+ ✓ Main.lean accepted in 2.60s
57
57
  ```
58
58
 
59
59
  No Lake project, dependency checkout, or toolchain setup required. Lean Runtime
@@ -123,7 +123,8 @@ lean-runtime check Main.lean --using ~/proofs/MyProject
123
123
  ```
124
124
 
125
125
  Typed `package:`, `lock:`, `env:`, `toolchain:`, and `project:` prefixes resolve
126
- rare ambiguities. Persistent store, registry, and trust policy belongs in
126
+ rare ambiguities. A project context applies to files inside that project's
127
+ root. Persistent store, registry, and trust policy belongs in
127
128
  environment configuration rather than everyday command lines.
128
129
 
129
130
  ## Commands
@@ -131,17 +132,19 @@ environment configuration rather than everyday command lines.
131
132
  The normal surface is deliberately small:
132
133
 
133
134
  ```text
134
- new NAME create a project
135
- adopt [PATH] share dependencies from existing project(s)
136
- check [PATH…] check a project, directory, source file, or stdin
137
- watch FILE re-check on save
138
- build [TARGET] build the current project
139
- update preview and apply a safe project update
140
- publish configure verified project publication
141
- status [PATH] explain the selected project or environment
142
- verify SUBJECT verify an exact artifact
143
- doctor diagnose and offer safe repairs
144
- clean preview and reclaim unused storage
135
+ new NAME create a project
136
+ adopt [PATH] share dependencies from existing project(s)
137
+ check [PATH…] check a project, directory, source file, or stdin (-)
138
+ watch FILE re-check on save
139
+ build [TARGET] build the current project
140
+ update preview and apply a safe project update
141
+ publish configure verified project publication
142
+ status [PATH] explain the selected project or environment
143
+ verify SUBJECT verify an exact artifact
144
+ doctor diagnose and offer safe repairs
145
+ clean preview and reclaim unused storage
146
+ replay CAPTURE replay an execution capture
147
+ completion SHELL generate shell completion
145
148
  ```
146
149
 
147
150
  Project commands use the current directory when no path is supplied. Guided
@@ -10,14 +10,14 @@ Give Lean Runtime an ordinary file:
10
10
 
11
11
  ```lean
12
12
  -- Main.lean
13
- import Mathlib
13
+ import Mathlib.Tactic.NormNum
14
14
 
15
15
  example : 2 + 2 = 4 := by norm_num
16
16
  ```
17
17
 
18
18
  ```console
19
19
  $ lean-runtime check Main.lean
20
- ✓ Main.lean accepted in 1.60s
20
+ ✓ Main.lean accepted in 2.60s
21
21
  ```
22
22
 
23
23
  No Lake project, dependency checkout, or toolchain setup required. Lean Runtime
@@ -87,7 +87,8 @@ lean-runtime check Main.lean --using ~/proofs/MyProject
87
87
  ```
88
88
 
89
89
  Typed `package:`, `lock:`, `env:`, `toolchain:`, and `project:` prefixes resolve
90
- rare ambiguities. Persistent store, registry, and trust policy belongs in
90
+ rare ambiguities. A project context applies to files inside that project's
91
+ root. Persistent store, registry, and trust policy belongs in
91
92
  environment configuration rather than everyday command lines.
92
93
 
93
94
  ## Commands
@@ -95,17 +96,19 @@ environment configuration rather than everyday command lines.
95
96
  The normal surface is deliberately small:
96
97
 
97
98
  ```text
98
- new NAME create a project
99
- adopt [PATH] share dependencies from existing project(s)
100
- check [PATH…] check a project, directory, source file, or stdin
101
- watch FILE re-check on save
102
- build [TARGET] build the current project
103
- update preview and apply a safe project update
104
- publish configure verified project publication
105
- status [PATH] explain the selected project or environment
106
- verify SUBJECT verify an exact artifact
107
- doctor diagnose and offer safe repairs
108
- clean preview and reclaim unused storage
99
+ new NAME create a project
100
+ adopt [PATH] share dependencies from existing project(s)
101
+ check [PATH…] check a project, directory, source file, or stdin (-)
102
+ watch FILE re-check on save
103
+ build [TARGET] build the current project
104
+ update preview and apply a safe project update
105
+ publish configure verified project publication
106
+ status [PATH] explain the selected project or environment
107
+ verify SUBJECT verify an exact artifact
108
+ doctor diagnose and offer safe repairs
109
+ clean preview and reclaim unused storage
110
+ replay CAPTURE replay an execution capture
111
+ completion SHELL generate shell completion
109
112
  ```
110
113
 
111
114
  Project commands use the current directory when no path is supplied. Guided
@@ -1,5 +1,5 @@
1
1
  schema = "lean-runtime.discovery.catalog-source/v1"
2
- generated_at = "2026-08-13T13:49:46Z"
2
+ generated_at = "2026-08-21T16:51:41Z"
3
3
 
4
4
  [[environment]]
5
5
  id = "core-v4.32.2"
@@ -84,3 +84,11 @@ references = [
84
84
  ]
85
85
  inventory_packages = ["LeanCert", "mathlib"]
86
86
  created_at = "2026-08-10T22:05:27Z"
87
+
88
+ [[environment]]
89
+ id = "mathlib-v4.33.1"
90
+ channel = "stable"
91
+ lock = "locks/mathlib-v4.33.1.lock.json"
92
+ references = ["github:leanprover-community/mathlib4@v4.33.1"]
93
+ inventory_packages = ["mathlib"]
94
+ created_at = "2026-08-21T16:51:41Z"
@@ -0,0 +1,244 @@
1
+ {
2
+ "lock_id": "lock_66cf2e4f7ba9465fbcb9287abf7d770b58e102b03e27cc52f15d8e952a69e924",
3
+ "manifest": {
4
+ "fixedToolchain": false,
5
+ "lakeDir": ".lake",
6
+ "name": "lean_runtime_environment",
7
+ "packages": [
8
+ {
9
+ "configFile": "lakefile.lean",
10
+ "inherited": false,
11
+ "inputRev": "0df444a360eaa60ab8c11dca51a86af692955474",
12
+ "manifestFile": "lake-manifest.json",
13
+ "name": "mathlib",
14
+ "rev": "0df444a360eaa60ab8c11dca51a86af692955474",
15
+ "scope": "",
16
+ "subDir": null,
17
+ "type": "git",
18
+ "url": "https://github.com/leanprover-community/mathlib4.git"
19
+ },
20
+ {
21
+ "configFile": "lakefile.toml",
22
+ "inherited": true,
23
+ "inputRev": "main",
24
+ "manifestFile": "lake-manifest.json",
25
+ "name": "plausible",
26
+ "rev": "b7eb3304aeae834b12dda98993a37f6a41f6f0bb",
27
+ "scope": "leanprover-community",
28
+ "subDir": null,
29
+ "type": "git",
30
+ "url": "https://github.com/leanprover-community/plausible"
31
+ },
32
+ {
33
+ "configFile": "lakefile.toml",
34
+ "inherited": true,
35
+ "inputRev": "main",
36
+ "manifestFile": "lake-manifest.json",
37
+ "name": "LeanSearchClient",
38
+ "rev": "5f4d51b81cbd3f6b32b156bfad9056621a040404",
39
+ "scope": "leanprover-community",
40
+ "subDir": null,
41
+ "type": "git",
42
+ "url": "https://github.com/leanprover-community/LeanSearchClient"
43
+ },
44
+ {
45
+ "configFile": "lakefile.toml",
46
+ "inherited": true,
47
+ "inputRev": "main",
48
+ "manifestFile": "lake-manifest.json",
49
+ "name": "importGraph",
50
+ "rev": "16f02aa7642864af59f1ff0e384a015994db9118",
51
+ "scope": "leanprover-community",
52
+ "subDir": null,
53
+ "type": "git",
54
+ "url": "https://github.com/leanprover-community/import-graph"
55
+ },
56
+ {
57
+ "configFile": "lakefile.lean",
58
+ "inherited": true,
59
+ "inputRev": "main",
60
+ "manifestFile": "lake-manifest.json",
61
+ "name": "proofwidgets",
62
+ "rev": "4be2e3d5087eeb272cf5a8853b8f9dd025ef5957",
63
+ "scope": "leanprover-community",
64
+ "subDir": null,
65
+ "type": "git",
66
+ "url": "https://github.com/leanprover-community/ProofWidgets4"
67
+ },
68
+ {
69
+ "configFile": "lakefile.toml",
70
+ "inherited": true,
71
+ "inputRev": "master",
72
+ "manifestFile": "lake-manifest.json",
73
+ "name": "aesop",
74
+ "rev": "3448c0bcc5ce01b2d1546e483ec3620e32df3d0e",
75
+ "scope": "leanprover-community",
76
+ "subDir": null,
77
+ "type": "git",
78
+ "url": "https://github.com/leanprover-community/aesop"
79
+ },
80
+ {
81
+ "configFile": "lakefile.toml",
82
+ "inherited": true,
83
+ "inputRev": "master",
84
+ "manifestFile": "lake-manifest.json",
85
+ "name": "Qq",
86
+ "rev": "92c15be17b7caf78c2ad767ec40f89052d908d81",
87
+ "scope": "leanprover-community",
88
+ "subDir": null,
89
+ "type": "git",
90
+ "url": "https://github.com/leanprover-community/quote4"
91
+ },
92
+ {
93
+ "configFile": "lakefile.toml",
94
+ "inherited": true,
95
+ "inputRev": "main",
96
+ "manifestFile": "lake-manifest.json",
97
+ "name": "batteries",
98
+ "rev": "4488d40d070b9700d4d5a6aa342f0d40c31b2a2d",
99
+ "scope": "leanprover-community",
100
+ "subDir": null,
101
+ "type": "git",
102
+ "url": "https://github.com/leanprover-community/batteries"
103
+ },
104
+ {
105
+ "configFile": "lakefile.toml",
106
+ "inherited": true,
107
+ "inputRev": "v4.33.0",
108
+ "manifestFile": "lake-manifest.json",
109
+ "name": "Cli",
110
+ "rev": "6130a47896ce867c6a4a55373441e59e565bad0f",
111
+ "scope": "leanprover",
112
+ "subDir": null,
113
+ "type": "git",
114
+ "url": "https://github.com/leanprover/lean4-cli"
115
+ }
116
+ ],
117
+ "packagesDir": ".lake/packages",
118
+ "version": "1.2.0"
119
+ },
120
+ "packages": [
121
+ {
122
+ "artifact_command": [],
123
+ "inherited": true,
124
+ "name": "Cli",
125
+ "requested_revision": "v4.33.0",
126
+ "revision": "6130a47896ce867c6a4a55373441e59e565bad0f",
127
+ "root_module": null,
128
+ "source": "git",
129
+ "source_id": "source_0402fb44cd255aa6abf01e100ffbc8b0a584fb06e7d667eca759a3fea1ce936f",
130
+ "subdir": null,
131
+ "tree_hash": "34330f4c97f983d6b2dcb6d1de73941d76f0d336",
132
+ "url": "https://github.com/leanprover/lean4-cli"
133
+ },
134
+ {
135
+ "artifact_command": [],
136
+ "inherited": true,
137
+ "name": "LeanSearchClient",
138
+ "requested_revision": "main",
139
+ "revision": "5f4d51b81cbd3f6b32b156bfad9056621a040404",
140
+ "root_module": null,
141
+ "source": "git",
142
+ "source_id": "source_2b06180ed488eb4e9b3be595ae700d1bcda4937b3c74a996b6ab14966ee339c8",
143
+ "subdir": null,
144
+ "tree_hash": "6df26d76c14ef44d6b84a19df906d9116cfe3a50",
145
+ "url": "https://github.com/leanprover-community/LeanSearchClient"
146
+ },
147
+ {
148
+ "artifact_command": [],
149
+ "inherited": true,
150
+ "name": "Qq",
151
+ "requested_revision": "master",
152
+ "revision": "92c15be17b7caf78c2ad767ec40f89052d908d81",
153
+ "root_module": null,
154
+ "source": "git",
155
+ "source_id": "source_b44eb196acecfe724380f2ccd514388734c8d02a1be9d2bf3ac9ce3bb304607e",
156
+ "subdir": null,
157
+ "tree_hash": "1e857c2d945d9f5757b39cd2a2be1ed1ea94c82c",
158
+ "url": "https://github.com/leanprover-community/quote4"
159
+ },
160
+ {
161
+ "artifact_command": [],
162
+ "inherited": true,
163
+ "name": "aesop",
164
+ "requested_revision": "master",
165
+ "revision": "3448c0bcc5ce01b2d1546e483ec3620e32df3d0e",
166
+ "root_module": null,
167
+ "source": "git",
168
+ "source_id": "source_9b0a2b5654b9b0c4a3f39b7d0d3536fd5a6c0743f9a578c872f2e92336df7b66",
169
+ "subdir": null,
170
+ "tree_hash": "b2a7fa8f458d93951096c5c16da08fbfab393c85",
171
+ "url": "https://github.com/leanprover-community/aesop"
172
+ },
173
+ {
174
+ "artifact_command": [],
175
+ "inherited": true,
176
+ "name": "batteries",
177
+ "requested_revision": "main",
178
+ "revision": "4488d40d070b9700d4d5a6aa342f0d40c31b2a2d",
179
+ "root_module": null,
180
+ "source": "git",
181
+ "source_id": "source_ed59216c03fbbd94e5c2ca84e014be429ad841975d9fb49cfaf8e7eca8ba0913",
182
+ "subdir": null,
183
+ "tree_hash": "5a1de86f7997958aaffec998882c29006b688d1e",
184
+ "url": "https://github.com/leanprover-community/batteries"
185
+ },
186
+ {
187
+ "artifact_command": [],
188
+ "inherited": true,
189
+ "name": "importGraph",
190
+ "requested_revision": "main",
191
+ "revision": "16f02aa7642864af59f1ff0e384a015994db9118",
192
+ "root_module": null,
193
+ "source": "git",
194
+ "source_id": "source_601bef5a8bbe2ecd1da264920f7af7f614428f74d2206055796079f550c16ead",
195
+ "subdir": null,
196
+ "tree_hash": "0330ba38791d120e992fd635f4198dd4f845f8d1",
197
+ "url": "https://github.com/leanprover-community/import-graph"
198
+ },
199
+ {
200
+ "artifact_command": [],
201
+ "inherited": false,
202
+ "name": "mathlib",
203
+ "requested_revision": "0df444a360eaa60ab8c11dca51a86af692955474",
204
+ "revision": "0df444a360eaa60ab8c11dca51a86af692955474",
205
+ "root_module": "Mathlib",
206
+ "source": "git",
207
+ "source_id": "source_1f0e94acb82fc5dc587e3acceb80897790beeec034b05722afad1db35764a966",
208
+ "subdir": null,
209
+ "tree_hash": "f18edc0401eb2459e5241329743eb8626fdff148",
210
+ "url": "https://github.com/leanprover-community/mathlib4.git"
211
+ },
212
+ {
213
+ "artifact_command": [],
214
+ "inherited": true,
215
+ "name": "plausible",
216
+ "requested_revision": "main",
217
+ "revision": "b7eb3304aeae834b12dda98993a37f6a41f6f0bb",
218
+ "root_module": null,
219
+ "source": "git",
220
+ "source_id": "source_2b217883fa26c662bc5f83bfd2dc8a2f2bb1af2cfebbe62514584c9b0a22c874",
221
+ "subdir": null,
222
+ "tree_hash": "52fb5a4067538333f08d2c2c2ee9db16351a3508",
223
+ "url": "https://github.com/leanprover-community/plausible"
224
+ },
225
+ {
226
+ "artifact_command": [],
227
+ "inherited": true,
228
+ "name": "proofwidgets",
229
+ "requested_revision": "main",
230
+ "revision": "4be2e3d5087eeb272cf5a8853b8f9dd025ef5957",
231
+ "root_module": null,
232
+ "source": "git",
233
+ "source_id": "source_f4de1d6d00d935d1bc5ec34f827c54091009039ef322e326b50a9d4520e490d0",
234
+ "subdir": null,
235
+ "tree_hash": "6848bab13b5769926e47be1c768b9c3cad3e0d41",
236
+ "url": "https://github.com/leanprover-community/ProofWidgets4"
237
+ }
238
+ ],
239
+ "root_lakefile": "name = \"lean_runtime_environment\"\nversion = \"0.0.0\"\ndefaultTargets = [\"LeanRuntimeEnvironment\"]\n\n[[require]]\nname = \"mathlib\"\ngit = \"https://github.com/leanprover-community/mathlib4.git\"\nrev = \"0df444a360eaa60ab8c11dca51a86af692955474\"\n\n[[lean_lib]]\nname = \"LeanRuntimeEnvironment\"\n",
240
+ "root_module": "import Mathlib\n\n/- Generated by Lean Runtime. -/\n",
241
+ "schema": "lean-runtime-environment-lock/1",
242
+ "spec_digest": "spec_bd04dd6fc4ab7ee22d1e836be9c5d1788169f9e583dcb14fa3bf55a5357abbba",
243
+ "toolchain": "leanprover/lean4:v4.33.1"
244
+ }
@@ -44,8 +44,11 @@ lean-runtime check Main.lean --offline
44
44
  lean-runtime check Main.lean --json
45
45
  lean-runtime check Main.lean --timings
46
46
  lean-runtime check Main.lean --repeat 10
47
+ lean-runtime check - --using leanprover/lean4:v4.33.0
47
48
  ```
48
49
 
50
+ `-` reads Lean source from standard input and requires an explicit context.
51
+
49
52
  `--allow-source-build` permits standalone discovery to build an environment from source when no suitable acquired form is available.
50
53
 
51
54
  ## Build cache control
@@ -63,5 +66,5 @@ The default build may restore supported dependency artifacts before invoking Lak
63
66
  | --- | --- |
64
67
  | `0` | Lean accepted the source. |
65
68
  | `1` | Lean ran and rejected the source. |
66
- | `2` | Invocation, context, acquisition, or configuration failed. |
69
+ | `2` | Invocation, context, acquisition, or configuration failed, or a resource limit such as `--timeout` was hit. |
67
70
  | `130` | Interrupted. |
@@ -115,7 +115,7 @@ Offline mode does not acquire missing remote content. Missing requirements produ
115
115
  | --- | --- |
116
116
  | `0` | Lean accepted the source. |
117
117
  | `1` | Lean ran and rejected the source. |
118
- | `2` | Invocation, context, acquisition, or configuration failed. |
118
+ | `2` | Invocation, context, acquisition, or configuration failed, or a resource limit such as `--timeout` was hit. |
119
119
  | `130` | The operation was interrupted. |
120
120
 
121
121
  Use `--json` for structured results and `--verbose` for the runtime event stream.
@@ -27,7 +27,15 @@ lean-runtime check Main.lean --using leanprover/lean4:v4.33.0
27
27
  lean-runtime check Main.lean --using ./some-project
28
28
  ```
29
29
 
30
- Package references resolve a published package release. Lock files identify an exact dependency graph. Toolchain references provide a core Lean context. Project paths use the project toolchain and manifest.
30
+ Package references resolve a published package release. Lock files identify an exact dependency graph. Toolchain references provide a core Lean context. Project paths use the project toolchain and manifest; the file must live inside that project's root.
31
+
32
+ ## Check standard input
33
+
34
+ Pass `-` as the input. Standard input carries no filename evidence, so an explicit context is required:
35
+
36
+ ```console
37
+ echo 'example : True := trivial' | lean-runtime check - --using leanprover/lean4:v4.33.0
38
+ ```
31
39
 
32
40
  ## Put context in the file
33
41