lean-runtime 2.2.0__tar.gz → 2.4.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 (166) hide show
  1. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/CHANGELOG.md +40 -0
  2. {lean_runtime-2.2.0/lean_runtime.egg-info → lean_runtime-2.4.0}/PKG-INFO +26 -10
  3. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/README.md +25 -9
  4. lean_runtime-2.4.0/catalog/environments.toml +95 -0
  5. lean_runtime-2.4.0/catalog/locks/leancert-v4.30.0.5.lock.json +269 -0
  6. lean_runtime-2.4.0/catalog/locks/leancert-v4.31.0.lock.json +269 -0
  7. lean_runtime-2.4.0/catalog/locks/leancert-v4.32.2.4.lock.json +269 -0
  8. lean_runtime-2.4.0/catalog/locks/leancert-v4.33.0.lock.json +269 -0
  9. lean_runtime-2.4.0/catalog/locks/mathlib-v4.33.0.lock.json +244 -0
  10. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/compatibility/README.md +3 -2
  11. lean_runtime-2.4.0/compatibility/mathlib-4.33.0.json +15 -0
  12. lean_runtime-2.4.0/compatibility/mathlib-4.33.0.toml +8 -0
  13. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/cli.md +15 -0
  14. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/getting-started.md +5 -5
  15. lean_runtime-2.4.0/docs/project-publishing.md +151 -0
  16. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/standalone-files.md +7 -5
  17. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/__init__.py +11 -1
  18. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/bundles.py +262 -18
  19. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/cli.py +244 -28
  20. lean_runtime-2.4.0/lean_runtime/console.py +246 -0
  21. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/catalog_build.py +12 -10
  22. lean_runtime-2.4.0/lean_runtime/discovery/data/catalog.json +1 -0
  23. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/planner.py +17 -4
  24. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/probe.py +8 -0
  25. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/errors.py +9 -0
  26. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/events.py +28 -3
  27. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/oci.py +147 -9
  28. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/policies.py +42 -0
  29. lean_runtime-2.4.0/lean_runtime/projects.py +475 -0
  30. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/run_cli.py +123 -33
  31. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/runtime.py +154 -3
  32. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/store.py +119 -4
  33. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/toolchains.py +6 -0
  34. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/verification.py +12 -13
  35. {lean_runtime-2.2.0 → lean_runtime-2.4.0/lean_runtime.egg-info}/PKG-INFO +26 -10
  36. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime.egg-info/SOURCES.txt +12 -0
  37. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/mkdocs.yml +1 -0
  38. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/pyproject.toml +1 -1
  39. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/test_catalog_build.py +47 -0
  40. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/test_planner.py +59 -0
  41. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_backend.py +1 -1
  42. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_bundles.py +166 -2
  43. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_cli.py +54 -0
  44. lean_runtime-2.4.0/tests/test_console.py +251 -0
  45. lean_runtime-2.4.0/tests/test_project_publish.py +186 -0
  46. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_run_cli.py +142 -1
  47. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_runtime.py +18 -0
  48. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_store.py +46 -0
  49. lean_runtime-2.4.0/tests/test_verification_probe.py +51 -0
  50. lean_runtime-2.2.0/catalog/environments.toml +0 -38
  51. lean_runtime-2.2.0/lean_runtime/discovery/data/catalog.json +0 -1
  52. lean_runtime-2.2.0/lean_runtime/projects.py +0 -214
  53. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/LICENSE +0 -0
  54. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/MANIFEST.in +0 -0
  55. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/catalog/locks/core-v4.32.2.lock.json +0 -0
  56. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/catalog/locks/mathlib-v4.30.0.lock.json +0 -0
  57. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/catalog/locks/mathlib-v4.31.0.lock.json +0 -0
  58. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/catalog/locks/mathlib-v4.32.2.lock.json +0 -0
  59. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/compatibility/mathlib-4.32.2.json +0 -0
  60. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/compatibility/mathlib-4.32.2.toml +0 -0
  61. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/architecture.md +0 -0
  62. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/captures.md +0 -0
  63. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/case-study-v1.md +0 -0
  64. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/development.md +0 -0
  65. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/environments.md +0 -0
  66. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/index.md +0 -0
  67. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/local-projects.md +0 -0
  68. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/portable-copies.md +0 -0
  69. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/python-api.md +0 -0
  70. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/ready-programs.md +0 -0
  71. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/trust-and-limitations.md +0 -0
  72. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/docs/v1-precision.md +0 -0
  73. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/examples/mathlib.toml +0 -0
  74. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/__main__.py +0 -0
  75. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/_git.py +0 -0
  76. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/_paths.py +0 -0
  77. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/backends.py +0 -0
  78. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/comparison.py +0 -0
  79. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/decisions.py +0 -0
  80. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/diagnostics.py +0 -0
  81. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/__init__.py +0 -0
  82. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/analyzer.py +0 -0
  83. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/api.py +0 -0
  84. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/candidate.py +0 -0
  85. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/catalog.py +0 -0
  86. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/catalog_cli.py +0 -0
  87. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/catalog_manifest.py +0 -0
  88. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/defaults.py +0 -0
  89. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/engine.py +0 -0
  90. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/errors.py +0 -0
  91. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/module_inventory.py +0 -0
  92. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/policy.py +0 -0
  93. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/py.typed +0 -0
  94. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/result.py +0 -0
  95. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/schema_resources.py +0 -0
  96. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/schemas/catalog-v1.schema.json +0 -0
  97. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/schemas/plan-v1.schema.json +0 -0
  98. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/discovery/schemas/result-v1.schema.json +0 -0
  99. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/environments.py +0 -0
  100. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/facade.py +0 -0
  101. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/frontmatter.py +0 -0
  102. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/health.py +0 -0
  103. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/lake.py +0 -0
  104. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/lockfiles.py +0 -0
  105. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/locking.py +0 -0
  106. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/matrix.py +0 -0
  107. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/models.py +0 -0
  108. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/profiling.py +0 -0
  109. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/programs.py +0 -0
  110. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/publisher_verification.py +0 -0
  111. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/py.typed +0 -0
  112. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/references.py +0 -0
  113. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/resolver.py +0 -0
  114. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/schema_resources.py +0 -0
  115. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/serialization.py +0 -0
  116. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/specs.py +0 -0
  117. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/timings.py +0 -0
  118. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/toolchain_slim.py +0 -0
  119. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime/wire.py +0 -0
  120. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime.egg-info/dependency_links.txt +0 -0
  121. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime.egg-info/entry_points.txt +0 -0
  122. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime.egg-info/requires.txt +0 -0
  123. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/lean_runtime.egg-info/top_level.txt +0 -0
  124. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/schemas/cleanup-v1.schema.json +0 -0
  125. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/schemas/comparison-v1.schema.json +0 -0
  126. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/schemas/execution-v1.schema.json +0 -0
  127. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/schemas/inspect-v1.schema.json +0 -0
  128. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/schemas/matrix-v1.schema.json +0 -0
  129. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/schemas/profile-v1.schema.json +0 -0
  130. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/schemas/verify-v1.schema.json +0 -0
  131. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/scripts/announcement_gate.py +0 -0
  132. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/scripts/registry_preflight.py +0 -0
  133. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/scripts/run_compatibility.py +0 -0
  134. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/scripts/run_v1_case_study.py +0 -0
  135. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/scripts/smoke_wheel.py +0 -0
  136. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/setup.cfg +0 -0
  137. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/conftest.py +0 -0
  138. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/e2e/test_real_discovery.py +0 -0
  139. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/test_analyzer.py +0 -0
  140. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/test_catalog.py +0 -0
  141. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/test_discovery_schema_resources.py +0 -0
  142. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/test_engine.py +0 -0
  143. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/discovery/test_policy.py +0 -0
  144. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_diagnostics.py +0 -0
  145. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_environment_integration.py +0 -0
  146. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_events_health.py +0 -0
  147. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_facade.py +0 -0
  148. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_frontmatter.py +0 -0
  149. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_git.py +0 -0
  150. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_interactive.py +0 -0
  151. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_lockfiles.py +0 -0
  152. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_models.py +0 -0
  153. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_multifile.py +0 -0
  154. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_paths.py +0 -0
  155. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_prebuilt_policy.py +0 -0
  156. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_programs.py +0 -0
  157. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_projects.py +0 -0
  158. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_references.py +0 -0
  159. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_schema_resources.py +0 -0
  160. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_schemas.py +0 -0
  161. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_signatures.py +0 -0
  162. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_specs.py +0 -0
  163. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_toolchain_slim.py +0 -0
  164. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_toolchains.py +0 -0
  165. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_v1_precision.py +0 -0
  166. {lean_runtime-2.2.0 → lean_runtime-2.4.0}/tests/test_verification_inventory.py +0 -0
@@ -1,5 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ - Extend the bundled catalog through Mathlib v4.33.0 and add exact LeanCert
6
+ environments for the supported Lean 4.30, 4.31, 4.32, and 4.33 lines.
7
+ Otherwise-equivalent discovery candidates now prefer the smallest exact
8
+ dependency closure, so LeanCert support does not enlarge ordinary Mathlib
9
+ checks.
10
+ - Make the public-cache post-publication consumer genuinely anonymous by
11
+ withholding registry credentials during its clean download and import probe.
12
+ - Verify imported immutable environments through their compiled module paths,
13
+ avoiding Lake dependency resolution that could attempt network clones after
14
+ a successful offline OCI import.
15
+ - Add a strict existing-project publication journey: `lean-runtime project
16
+ inspect`, `project lock`, `project export`, and `project init-publish` turn a
17
+ clean, pushed root GitHub Lean project into an exact managed environment.
18
+ - Add a public reusable GitHub workflow that builds Linux AMD64, macOS AMD64,
19
+ and macOS ARM64 environments, signs and attests their artifacts, finalizes
20
+ the OCI index atomically, and runs clean anonymous import checks on every
21
+ platform.
22
+ - Validate registry configuration inside the CLI error boundary so malformed
23
+ libraries produce concise invocation errors instead of Python tracebacks.
24
+ - Report total, uploaded, and remotely reused OCI blob bytes (plus the reuse
25
+ percentage) in every environment publication result. Reusable workflows can
26
+ set `minimum-reuse-percent` to make regressions fail the publication job.
27
+ - Emit visible progress for bundle export, blob upload/reuse, platform
28
+ manifests, attestations, and final index signing during long publications.
29
+ - Publish from the verified OCI layout directly, avoiding the redundant outer
30
+ gzip archive and immediate re-extraction previously performed before upload.
31
+ - Compress deterministic OCI layers at gzip level 6 instead of Python's
32
+ level-9 default; a representative Mathlib subtree encoded about eight times
33
+ faster for roughly two percent more bytes.
34
+ - Exclude clone-specific Git administration data from package layers and carry
35
+ a verified deterministic source-tree inventory instead. Identical dependency
36
+ trees now produce identical blobs across clean builders, so OCI reuse works
37
+ across project revisions rather than only within one local environment.
38
+ - Omit Lake's path-sensitive `.trace`, `.setup.json`, and response-file metadata from
39
+ check-profile layers. Lean checks use the retained compiled artifacts, while
40
+ clean builders no longer invalidate multi-gigabyte blobs solely because their
41
+ temporary workspace paths differ.
42
+
3
43
  ## 2.2.0 - 2026-08-12
4
44
 
5
45
  - Make published-environment checks invoke Lean directly with the immutable
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lean-runtime
3
- Version: 2.2.0
3
+ Version: 2.4.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
@@ -84,16 +84,17 @@ lean-run Main.lean --lock-out environment.lock.json
84
84
  lean-run Main.lean --lock environment.lock.json
85
85
  ```
86
86
 
87
- The initial catalog covers core Lean v4.32.2 plus Mathlib v4.32.2, v4.31.0, and
88
- v4.30.0. Runtime first tries its local store and downloadable environment libraries,
89
- then builds the exact source environment when necessary. Use `--no-source-build` to
90
- forbid that potentially large fallback or `--offline` to use retained environments only.
87
+ The bundled catalog covers Mathlib v4.30.0 through v4.33.0 and matching LeanCert
88
+ releases, plus core Lean v4.32.2. Runtime first tries its local store and downloadable
89
+ environment libraries, then builds the exact source environment when necessary. Use
90
+ `--no-source-build` to forbid that potentially large fallback or `--offline` to use
91
+ retained environments only.
91
92
 
92
93
  Explicit frontmatter remains available when the desired context is already known:
93
94
 
94
95
  ```lean
95
96
  -- /// lean-runtime
96
- -- requires = ["mathlib@v4.32.2"]
97
+ -- requires = ["mathlib@v4.33.0"]
97
98
  -- ///
98
99
 
99
100
  import Mathlib
@@ -102,13 +103,13 @@ import Mathlib
102
103
  The same context can be supplied from the command line:
103
104
 
104
105
  ```bash
105
- lean-run Main.lean --with mathlib@v4.32.2
106
+ lean-run Main.lean --with mathlib@v4.33.0
106
107
  ```
107
108
 
108
109
  Create an exact lock from an explicit dependency for CI without changing the file:
109
110
 
110
111
  ```bash
111
- lean-run Main.lean --with mathlib@v4.32.2 \
112
+ lean-run Main.lean --with mathlib@v4.33.0 \
112
113
  --lock-out environment.lock.json
113
114
  lean-run Main.lean --lock environment.lock.json
114
115
  ```
@@ -120,7 +121,7 @@ Configure an environment once, then use it repeatedly:
120
121
  ```python
121
122
  import lean_runtime as lean
122
123
 
123
- env = lean.setup(["mathlib@v4.32.2"])
124
+ env = lean.setup(["mathlib@v4.33.0"])
124
125
 
125
126
  result = env.check(
126
127
  """
@@ -167,7 +168,7 @@ result = project.check_file("./my-project/MyProject/Main.lean")
167
168
  One-shot helpers are available when setup reuse is unnecessary:
168
169
 
169
170
  ```python
170
- result = lean.check(source, deps=["mathlib@v4.32.2"])
171
+ result = lean.check(source, deps=["mathlib@v4.33.0"])
171
172
  result = lean.check_file("./my-project/MyProject/Main.lean")
172
173
  ```
173
174
 
@@ -205,6 +206,20 @@ lean-runtime build-and-publish environment.lock.json \
205
206
  --publish-to ghcr.io/owner/lean-environments
206
207
  ```
207
208
 
209
+ To publish an existing clean, pushed GitHub Lean project, inspect it and
210
+ generate the maintained multi-platform workflow:
211
+
212
+ ```bash
213
+ lean-runtime project inspect . --module MyProject
214
+ lean-runtime project init-publish . \
215
+ --module MyProject \
216
+ --library ghcr.io/owner/my-project-environments
217
+ ```
218
+
219
+ The workflow builds and verifies Linux and macOS environments, finalizes the
220
+ index atomically, then checks clean consumers. See
221
+ [Publishing a Lean project](https://alerad.github.io/lean-runtime/project-publishing/).
222
+
208
223
  For an already-built executable, Lean Runtime can also create a verified
209
224
  **ready-to-run program**. It opens without rebuilding the project, can be saved
210
225
  as a portable copy, and can be shared through a public or private program
@@ -226,6 +241,7 @@ architecture documentation.
226
241
  - [`lean-run` and operations CLI](https://github.com/alerad/lean-runtime/blob/main/docs/cli.md)
227
242
  - [Managed environments](https://github.com/alerad/lean-runtime/blob/main/docs/environments.md)
228
243
  - [Local Lake projects](https://github.com/alerad/lean-runtime/blob/main/docs/local-projects.md)
244
+ - [Publishing a Lean project](https://github.com/alerad/lean-runtime/blob/main/docs/project-publishing.md)
229
245
  - [Portable copies and environment libraries](https://github.com/alerad/lean-runtime/blob/main/docs/portable-copies.md)
230
246
  - [Ready-to-run programs](https://github.com/alerad/lean-runtime/blob/main/docs/ready-programs.md)
231
247
  - [Architecture](https://github.com/alerad/lean-runtime/blob/main/docs/architecture.md)
@@ -49,16 +49,17 @@ lean-run Main.lean --lock-out environment.lock.json
49
49
  lean-run Main.lean --lock environment.lock.json
50
50
  ```
51
51
 
52
- The initial catalog covers core Lean v4.32.2 plus Mathlib v4.32.2, v4.31.0, and
53
- v4.30.0. Runtime first tries its local store and downloadable environment libraries,
54
- then builds the exact source environment when necessary. Use `--no-source-build` to
55
- forbid that potentially large fallback or `--offline` to use retained environments only.
52
+ The bundled catalog covers Mathlib v4.30.0 through v4.33.0 and matching LeanCert
53
+ releases, plus core Lean v4.32.2. Runtime first tries its local store and downloadable
54
+ environment libraries, then builds the exact source environment when necessary. Use
55
+ `--no-source-build` to forbid that potentially large fallback or `--offline` to use
56
+ retained environments only.
56
57
 
57
58
  Explicit frontmatter remains available when the desired context is already known:
58
59
 
59
60
  ```lean
60
61
  -- /// lean-runtime
61
- -- requires = ["mathlib@v4.32.2"]
62
+ -- requires = ["mathlib@v4.33.0"]
62
63
  -- ///
63
64
 
64
65
  import Mathlib
@@ -67,13 +68,13 @@ import Mathlib
67
68
  The same context can be supplied from the command line:
68
69
 
69
70
  ```bash
70
- lean-run Main.lean --with mathlib@v4.32.2
71
+ lean-run Main.lean --with mathlib@v4.33.0
71
72
  ```
72
73
 
73
74
  Create an exact lock from an explicit dependency for CI without changing the file:
74
75
 
75
76
  ```bash
76
- lean-run Main.lean --with mathlib@v4.32.2 \
77
+ lean-run Main.lean --with mathlib@v4.33.0 \
77
78
  --lock-out environment.lock.json
78
79
  lean-run Main.lean --lock environment.lock.json
79
80
  ```
@@ -85,7 +86,7 @@ Configure an environment once, then use it repeatedly:
85
86
  ```python
86
87
  import lean_runtime as lean
87
88
 
88
- env = lean.setup(["mathlib@v4.32.2"])
89
+ env = lean.setup(["mathlib@v4.33.0"])
89
90
 
90
91
  result = env.check(
91
92
  """
@@ -132,7 +133,7 @@ result = project.check_file("./my-project/MyProject/Main.lean")
132
133
  One-shot helpers are available when setup reuse is unnecessary:
133
134
 
134
135
  ```python
135
- result = lean.check(source, deps=["mathlib@v4.32.2"])
136
+ result = lean.check(source, deps=["mathlib@v4.33.0"])
136
137
  result = lean.check_file("./my-project/MyProject/Main.lean")
137
138
  ```
138
139
 
@@ -170,6 +171,20 @@ lean-runtime build-and-publish environment.lock.json \
170
171
  --publish-to ghcr.io/owner/lean-environments
171
172
  ```
172
173
 
174
+ To publish an existing clean, pushed GitHub Lean project, inspect it and
175
+ generate the maintained multi-platform workflow:
176
+
177
+ ```bash
178
+ lean-runtime project inspect . --module MyProject
179
+ lean-runtime project init-publish . \
180
+ --module MyProject \
181
+ --library ghcr.io/owner/my-project-environments
182
+ ```
183
+
184
+ The workflow builds and verifies Linux and macOS environments, finalizes the
185
+ index atomically, then checks clean consumers. See
186
+ [Publishing a Lean project](https://alerad.github.io/lean-runtime/project-publishing/).
187
+
173
188
  For an already-built executable, Lean Runtime can also create a verified
174
189
  **ready-to-run program**. It opens without rebuilding the project, can be saved
175
190
  as a portable copy, and can be shared through a public or private program
@@ -191,6 +206,7 @@ architecture documentation.
191
206
  - [`lean-run` and operations CLI](https://github.com/alerad/lean-runtime/blob/main/docs/cli.md)
192
207
  - [Managed environments](https://github.com/alerad/lean-runtime/blob/main/docs/environments.md)
193
208
  - [Local Lake projects](https://github.com/alerad/lean-runtime/blob/main/docs/local-projects.md)
209
+ - [Publishing a Lean project](https://github.com/alerad/lean-runtime/blob/main/docs/project-publishing.md)
194
210
  - [Portable copies and environment libraries](https://github.com/alerad/lean-runtime/blob/main/docs/portable-copies.md)
195
211
  - [Ready-to-run programs](https://github.com/alerad/lean-runtime/blob/main/docs/ready-programs.md)
196
212
  - [Architecture](https://github.com/alerad/lean-runtime/blob/main/docs/architecture.md)
@@ -0,0 +1,95 @@
1
+ schema = "lean-runtime.discovery.catalog-source/v1"
2
+ generated_at = "2026-08-13T13:49:46Z"
3
+
4
+ [[environment]]
5
+ id = "core-v4.32.2"
6
+ channel = "stable"
7
+ lock = "locks/core-v4.32.2.lock.json"
8
+ inventory_packages = []
9
+ modules = ["Init", "Lean", "Std"]
10
+ library_hints = []
11
+ created_at = "2026-08-08T16:24:59Z"
12
+
13
+ [[environment]]
14
+ id = "mathlib-v4.32.2"
15
+ channel = "stable"
16
+ lock = "locks/mathlib-v4.32.2.lock.json"
17
+ references = ["github:leanprover-community/mathlib4@v4.32.2"]
18
+ inventory_packages = ["mathlib"]
19
+ library_hints = []
20
+ created_at = "2026-07-28T18:36:13+02:00"
21
+
22
+ [[environment]]
23
+ id = "mathlib-v4.33.0"
24
+ channel = "stable"
25
+ lock = "locks/mathlib-v4.33.0.lock.json"
26
+ references = ["github:leanprover-community/mathlib4@v4.33.0"]
27
+ inventory_packages = ["mathlib"]
28
+ library_hints = []
29
+ created_at = "2026-08-10T09:12:31Z"
30
+
31
+ [[environment]]
32
+ id = "mathlib-v4.31.0"
33
+ channel = "stable"
34
+ lock = "locks/mathlib-v4.31.0.lock.json"
35
+ references = ["github:leanprover-community/mathlib4@v4.31.0"]
36
+ inventory_packages = ["mathlib"]
37
+ library_hints = []
38
+ created_at = "2026-06-15T14:22:22Z"
39
+
40
+ [[environment]]
41
+ id = "mathlib-v4.30.0"
42
+ channel = "stable"
43
+ lock = "locks/mathlib-v4.30.0.lock.json"
44
+ references = ["github:leanprover-community/mathlib4@v4.30.0"]
45
+ inventory_packages = ["mathlib"]
46
+ library_hints = []
47
+ created_at = "2026-05-26T18:25:31Z"
48
+
49
+ [[environment]]
50
+ id = "leancert-v4.30.0.5"
51
+ channel = "stable"
52
+ lock = "locks/leancert-v4.30.0.5.lock.json"
53
+ references = [
54
+ "github:alerad/leancert@v4.30.0.5",
55
+ "github:leanprover-community/mathlib4@v4.30.0",
56
+ ]
57
+ inventory_packages = ["LeanCert", "mathlib"]
58
+ library_hints = []
59
+ created_at = "2026-06-14T03:06:27Z"
60
+
61
+ [[environment]]
62
+ id = "leancert-v4.31.0"
63
+ channel = "stable"
64
+ lock = "locks/leancert-v4.31.0.lock.json"
65
+ references = [
66
+ "github:alerad/leancert@v4.31.0",
67
+ "github:leanprover-community/mathlib4@v4.31.0",
68
+ ]
69
+ inventory_packages = ["LeanCert", "mathlib"]
70
+ library_hints = []
71
+ created_at = "2026-06-18T16:14:44Z"
72
+
73
+ [[environment]]
74
+ id = "leancert-v4.32.2.4"
75
+ channel = "stable"
76
+ lock = "locks/leancert-v4.32.2.4.lock.json"
77
+ references = [
78
+ "github:alerad/leancert@v4.32.2.4",
79
+ "github:leanprover-community/mathlib4@v4.32.2",
80
+ ]
81
+ inventory_packages = ["LeanCert", "mathlib"]
82
+ library_hints = []
83
+ created_at = "2026-08-01T10:49:16Z"
84
+
85
+ [[environment]]
86
+ id = "leancert-v4.33.0"
87
+ channel = "stable"
88
+ lock = "locks/leancert-v4.33.0.lock.json"
89
+ references = [
90
+ "github:alerad/leancert@v4.33.0",
91
+ "github:leanprover-community/mathlib4@v4.33.0",
92
+ ]
93
+ inventory_packages = ["LeanCert", "mathlib"]
94
+ library_hints = []
95
+ created_at = "2026-08-10T22:05:27Z"
@@ -0,0 +1,269 @@
1
+ {
2
+ "lock_id": "lock_29bb182de663e306a3aac0cf32691c7f4e19362890a10d575dea539ab5738c47",
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": "c5ea00351c28e24afc9f0f84379aa41082b1188f",
12
+ "manifestFile": "lake-manifest.json",
13
+ "name": "mathlib",
14
+ "rev": "c5ea00351c28e24afc9f0f84379aa41082b1188f",
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": false,
23
+ "inputRev": "87c4ec2af2b18227ca2c98c4459c3ea60b88ce52",
24
+ "manifestFile": "lake-manifest.json",
25
+ "name": "LeanCert",
26
+ "rev": "87c4ec2af2b18227ca2c98c4459c3ea60b88ce52",
27
+ "scope": "",
28
+ "subDir": null,
29
+ "type": "git",
30
+ "url": "https://github.com/alerad/leancert.git"
31
+ },
32
+ {
33
+ "configFile": "lakefile.toml",
34
+ "inherited": true,
35
+ "inputRev": "main",
36
+ "manifestFile": "lake-manifest.json",
37
+ "name": "plausible",
38
+ "rev": "a456461b368b71d2accd95234832cd9c174b5437",
39
+ "scope": "leanprover-community",
40
+ "subDir": null,
41
+ "type": "git",
42
+ "url": "https://github.com/leanprover-community/plausible"
43
+ },
44
+ {
45
+ "configFile": "lakefile.toml",
46
+ "inherited": true,
47
+ "inputRev": "main",
48
+ "manifestFile": "lake-manifest.json",
49
+ "name": "LeanSearchClient",
50
+ "rev": "c5d5b8fe6e5158def25cd28eb94e4141ad97c843",
51
+ "scope": "leanprover-community",
52
+ "subDir": null,
53
+ "type": "git",
54
+ "url": "https://github.com/leanprover-community/LeanSearchClient"
55
+ },
56
+ {
57
+ "configFile": "lakefile.toml",
58
+ "inherited": true,
59
+ "inputRev": "main",
60
+ "manifestFile": "lake-manifest.json",
61
+ "name": "importGraph",
62
+ "rev": "515cf9d0c00ece5e661f6de4326a53dedc1e8ea1",
63
+ "scope": "leanprover-community",
64
+ "subDir": null,
65
+ "type": "git",
66
+ "url": "https://github.com/leanprover-community/import-graph"
67
+ },
68
+ {
69
+ "configFile": "lakefile.lean",
70
+ "inherited": true,
71
+ "inputRev": "v0.0.99",
72
+ "manifestFile": "lake-manifest.json",
73
+ "name": "proofwidgets",
74
+ "rev": "a84b3e2475d5c5ab979567b1ad8aea21b764bcf8",
75
+ "scope": "leanprover-community",
76
+ "subDir": null,
77
+ "type": "git",
78
+ "url": "https://github.com/leanprover-community/ProofWidgets4"
79
+ },
80
+ {
81
+ "configFile": "lakefile.toml",
82
+ "inherited": true,
83
+ "inputRev": "v4.30.0",
84
+ "manifestFile": "lake-manifest.json",
85
+ "name": "aesop",
86
+ "rev": "558915ae105bfd8074e22d597613d1961822adc2",
87
+ "scope": "leanprover-community",
88
+ "subDir": null,
89
+ "type": "git",
90
+ "url": "https://github.com/leanprover-community/aesop"
91
+ },
92
+ {
93
+ "configFile": "lakefile.toml",
94
+ "inherited": true,
95
+ "inputRev": "v4.30.0",
96
+ "manifestFile": "lake-manifest.json",
97
+ "name": "Qq",
98
+ "rev": "a6e6c34c4ef182f83b219a3a5a385f51f44bdc4c",
99
+ "scope": "leanprover-community",
100
+ "subDir": null,
101
+ "type": "git",
102
+ "url": "https://github.com/leanprover-community/quote4"
103
+ },
104
+ {
105
+ "configFile": "lakefile.toml",
106
+ "inherited": true,
107
+ "inputRev": "main",
108
+ "manifestFile": "lake-manifest.json",
109
+ "name": "batteries",
110
+ "rev": "32dc18cde3684679f3c003de608743b57498c56f",
111
+ "scope": "leanprover-community",
112
+ "subDir": null,
113
+ "type": "git",
114
+ "url": "https://github.com/leanprover-community/batteries"
115
+ },
116
+ {
117
+ "configFile": "lakefile.toml",
118
+ "inherited": true,
119
+ "inputRev": "v4.30.0",
120
+ "manifestFile": "lake-manifest.json",
121
+ "name": "Cli",
122
+ "rev": "6b907cf12b2e445ccb7c24bc208ef04a1f39e84c",
123
+ "scope": "leanprover",
124
+ "subDir": null,
125
+ "type": "git",
126
+ "url": "https://github.com/leanprover/lean4-cli"
127
+ }
128
+ ],
129
+ "packagesDir": ".lake/packages",
130
+ "version": "1.2.0"
131
+ },
132
+ "packages": [
133
+ {
134
+ "artifact_command": [],
135
+ "inherited": true,
136
+ "name": "Cli",
137
+ "requested_revision": "v4.30.0",
138
+ "revision": "6b907cf12b2e445ccb7c24bc208ef04a1f39e84c",
139
+ "root_module": null,
140
+ "source": "git",
141
+ "source_id": "source_c01f06910785f51a955b789fe595cb0f7a9e31fdbd52a9c179c13bc15a215aba",
142
+ "subdir": null,
143
+ "tree_hash": "8a76534436fb49125055d57998a2907a396186f8",
144
+ "url": "https://github.com/leanprover/lean4-cli"
145
+ },
146
+ {
147
+ "artifact_command": [],
148
+ "inherited": false,
149
+ "name": "LeanCert",
150
+ "requested_revision": "87c4ec2af2b18227ca2c98c4459c3ea60b88ce52",
151
+ "revision": "87c4ec2af2b18227ca2c98c4459c3ea60b88ce52",
152
+ "root_module": "LeanCert",
153
+ "source": "git",
154
+ "source_id": "source_69f4f19bcb5f304b90ca4a7617335206c5a7815b3ed98fcc0fc67f6c1b1c7d95",
155
+ "subdir": null,
156
+ "tree_hash": "0087ab885fd676c99c2376b57677fde81f6ff318",
157
+ "url": "https://github.com/alerad/leancert.git"
158
+ },
159
+ {
160
+ "artifact_command": [],
161
+ "inherited": true,
162
+ "name": "LeanSearchClient",
163
+ "requested_revision": "main",
164
+ "revision": "c5d5b8fe6e5158def25cd28eb94e4141ad97c843",
165
+ "root_module": null,
166
+ "source": "git",
167
+ "source_id": "source_de17867f530aa12a11295b9e954c0bc71adf2e186913d1eb3d494b206a324b67",
168
+ "subdir": null,
169
+ "tree_hash": "d0224b6df6c90cc0b4ed2db6218037d31bfd6f52",
170
+ "url": "https://github.com/leanprover-community/LeanSearchClient"
171
+ },
172
+ {
173
+ "artifact_command": [],
174
+ "inherited": true,
175
+ "name": "Qq",
176
+ "requested_revision": "v4.30.0",
177
+ "revision": "a6e6c34c4ef182f83b219a3a5a385f51f44bdc4c",
178
+ "root_module": null,
179
+ "source": "git",
180
+ "source_id": "source_60de60b0b4c17b986970ce14b7745f03577878d68d571d26b0f79ad2050944c5",
181
+ "subdir": null,
182
+ "tree_hash": "3cd6c8c7454ab4cdc4f5c7068250d42e6f072b42",
183
+ "url": "https://github.com/leanprover-community/quote4"
184
+ },
185
+ {
186
+ "artifact_command": [],
187
+ "inherited": true,
188
+ "name": "aesop",
189
+ "requested_revision": "v4.30.0",
190
+ "revision": "558915ae105bfd8074e22d597613d1961822adc2",
191
+ "root_module": null,
192
+ "source": "git",
193
+ "source_id": "source_d00c4fd39cd426bf0c5055708b35c89ee9d4a93bb7b1703858a84820b53d7a83",
194
+ "subdir": null,
195
+ "tree_hash": "9f9a222ac975ad751c92bcf0f46de9fd2b0c3cfb",
196
+ "url": "https://github.com/leanprover-community/aesop"
197
+ },
198
+ {
199
+ "artifact_command": [],
200
+ "inherited": true,
201
+ "name": "batteries",
202
+ "requested_revision": "main",
203
+ "revision": "32dc18cde3684679f3c003de608743b57498c56f",
204
+ "root_module": null,
205
+ "source": "git",
206
+ "source_id": "source_e9f2d8aa0918281163471c383fe2b84f3e8664c515d68e2b5a8be71a8bf1a656",
207
+ "subdir": null,
208
+ "tree_hash": "436fbfdcb885492763ccee85e5db580d1995966f",
209
+ "url": "https://github.com/leanprover-community/batteries"
210
+ },
211
+ {
212
+ "artifact_command": [],
213
+ "inherited": true,
214
+ "name": "importGraph",
215
+ "requested_revision": "main",
216
+ "revision": "515cf9d0c00ece5e661f6de4326a53dedc1e8ea1",
217
+ "root_module": null,
218
+ "source": "git",
219
+ "source_id": "source_a017eacbcf51b53b1088560de28a2887167215ef1c65dbce09eb4fe0d884e9f7",
220
+ "subdir": null,
221
+ "tree_hash": "7418207a8b90a9f8e7223c20009d7eab86a4fd53",
222
+ "url": "https://github.com/leanprover-community/import-graph"
223
+ },
224
+ {
225
+ "artifact_command": [],
226
+ "inherited": false,
227
+ "name": "mathlib",
228
+ "requested_revision": "c5ea00351c28e24afc9f0f84379aa41082b1188f",
229
+ "revision": "c5ea00351c28e24afc9f0f84379aa41082b1188f",
230
+ "root_module": "Mathlib",
231
+ "source": "git",
232
+ "source_id": "source_fe2d2fc9c4c54f6dc89ac1ccd4c00581a362e2c2f1914e024983c4d70c375637",
233
+ "subdir": null,
234
+ "tree_hash": "1fe688f4d9e84fb268a300f8ac33cbca883fbd28",
235
+ "url": "https://github.com/leanprover-community/mathlib4.git"
236
+ },
237
+ {
238
+ "artifact_command": [],
239
+ "inherited": true,
240
+ "name": "plausible",
241
+ "requested_revision": "main",
242
+ "revision": "a456461b368b71d2accd95234832cd9c174b5437",
243
+ "root_module": null,
244
+ "source": "git",
245
+ "source_id": "source_6a376c3e5442e8aaca75bf1fbffba6168941014ad82653c242c5b646042557ba",
246
+ "subdir": null,
247
+ "tree_hash": "cbfb86e477a2ed89137953b22bbf38149658b672",
248
+ "url": "https://github.com/leanprover-community/plausible"
249
+ },
250
+ {
251
+ "artifact_command": [],
252
+ "inherited": true,
253
+ "name": "proofwidgets",
254
+ "requested_revision": "v0.0.99",
255
+ "revision": "a84b3e2475d5c5ab979567b1ad8aea21b764bcf8",
256
+ "root_module": null,
257
+ "source": "git",
258
+ "source_id": "source_25d2a88210f202e2624693750d9bbfba88d9012ec3a95576f25bdf49cb50ca85",
259
+ "subdir": null,
260
+ "tree_hash": "e0e2c368464f34b36f0db3901ce3c8ab4a1b8a40",
261
+ "url": "https://github.com/leanprover-community/ProofWidgets4"
262
+ }
263
+ ],
264
+ "root_lakefile": "name = \"lean_runtime_environment\"\nversion = \"0.0.0\"\ndefaultTargets = [\"LeanRuntimeEnvironment\"]\n\n[[require]]\nname = \"LeanCert\"\ngit = \"https://github.com/alerad/leancert.git\"\nrev = \"87c4ec2af2b18227ca2c98c4459c3ea60b88ce52\"\n\n[[require]]\nname = \"mathlib\"\ngit = \"https://github.com/leanprover-community/mathlib4.git\"\nrev = \"c5ea00351c28e24afc9f0f84379aa41082b1188f\"\n\n[[lean_lib]]\nname = \"LeanRuntimeEnvironment\"\n",
265
+ "root_module": "import LeanCert\nimport Mathlib\n\n/- Generated by Lean Runtime. -/\n",
266
+ "schema": "lean-runtime-environment-lock/1",
267
+ "spec_digest": "spec_3708a7479f725ff751c872954585d9b59b33810bae774cb47440a61610735fac",
268
+ "toolchain": "leanprover/lean4:v4.30.0"
269
+ }