Repository navigation
-
Refactor adoption into read-only action planning, component accounting, and report
rendering. Share donor/source selection with execution and retain execution-time
validation. Separate logical replacement, retained source/package/artifact content,
and payload transfer. Deduplicate source objects by source identity; never add
publication samples to measured totals. Remove the misleading aggregate published
artifact-size headline. Report signed logical change when complete; physical disk
recovery and peak allocation remain unknown. Add typed uncertainty and versioned
additive JSON estimates; deprecate aggregate sample and physical-recovery scalars. -
Measure inventory completeness and local post-operation observations. Reuse one
missing-frame validator for sparse OCI planning/pulling, deduplicate exact ranges,
and expose remaining payload separately from config metadata read during planning. -
Correct attach/detach transaction cleanup: failed backup deletion after commit
reports cleanup failure without attempting rollback from a partially removed backup. -
Add OCI metadata-backed artifact size references to adoption planning, with
explicitly approximate same-repository revision fallbacks. Keep these separate
from exact reuse/storage decisions. Summarize unknown costs and substituted
versions in normal output; expose per-project provenance with--verboseand
JSON. Metadata lookup never installs compilers or downloads artifact packs. -
Parallelize adoption project inspection and hashing of unique local dependency
directories. Automatically size the planning pool from available CPUs and RAM,
capped at eight workers; addadopt --jobsfor explicit control. Deduplicate
source hashes and repeated size inventories within each plan, preserve result
order and worker progress, and retain fresh execution-time validation. Package
preparation and attachment remain serialized. -
Make shared package and artifact identities cover the full normalized effective
root graph, including dependencies introduced by overrides. This fixes an
unsound reuse key; it does not demonstrate an incorrect Lean verdict. Bump
shared-project identity to v4 and artifact compatibility to v3; older records
cannot authorize artifact reuse. Unrelated graph changes now conservatively
invalidate reuse too. -
During first adoption, retain compatible build outputs from the original local
dependency checkout only when its recorded compiler and graph provenance match.
Exclude linked state and path-sensitive traces; report rejected donors and the
need to rebuild when provenance is unavailable. Source import remains separate
from artifact migration, including for subdirectory packages. -
Revalidate every project during batch adoption instead of skipping projects
merely because an attachment marker exists. Broken or stale links are repaired
through normal adoption; modified local checkouts remain protected. Planning,
adoption, andverify PROJECTshare attachment validation. Project verification
is local-only and reportssubject_kind: projectwith null lock/environment IDs;
it verifies attachment state, not a Lean proof verdict. -
Plan reuse with locally hashed Lean/Lake identities without installing tools.
Report incomplete storage estimates, unknown download amounts, and unknown
recovery instead of treating missing dependencies as zero-cost acquisitions.
Storage figures describe materialized content, not physical disk allocation. -
Exercise Windows unit tests, macOS real-Lean integration, and clean anonymous
Mathlib consumption of the PR checkout in CI. Add active HTTP cancellation
and descendant-termination regressions; cancellation now checks between
available HTTP chunks, and POSIX shutdown kills surviving descendants even
when the direct child exits first. -
Make store lifecycle guarantees consistent across every execution path.
Every cross-process lock now comes from one registry under<home>/.locks
(LockPaths), so shared-project package locks and store cleanup finally
contend; every published tree goes through one staged-publish transaction
whose staging directory is owned by a lock while it is built, sodoctor --repaironly removes staging trees nobody is building; scratch cleanup
holds the workspace lease across its rename; capsule and slim-toolchain
replacement swaps the old tree out only once the new one is complete and
restores it if the swap fails; a failedadoptrestores the previous
attachment record and config instead of deleting them; sparse projections
validate the existing environment before writing into it. -
Carry cancellation and bounds end to end. All child processes (Lean, Lake,
Git, elan, helpers) run through one internal seam with a shared timeout,
cancel event, bounded output and observer buffering, process-tree shutdown
and reader deadlines, and resource limits are applied without importing in
the forked child. Sparse acquisition, capsule pulls and source fetches
accept the cancel event; async wrappers preserve the caller's cancellation
when a worker fails during cleanup; a failing matrix context always stops
its running siblings. -
Validate at the boundary and keep identities stable. One portable
relative-path policy (rejecting absolute, drive, UNC, backslash, NUL and
..forms) backs manifests, locks, capsules, archives and program
inventories; locks validatepackagesDirand package subdirectories at
construction and freeze their manifest solock_idcannot drift; provenance
and program inventories are frozen the same way; specifications, generated
root modules and locks all use one canonical package order;verify
reports the path check it actually performs. -
Refresh storage status honestly: aliases, usage timestamps and object
counts are re-read on every call while the expensive size accounting stays
cached, and shared package builds invalidate that cache explicitly. The
header-snapshot cache keys by the compiler binary's identity, not its
spelling. -
Consolidate result construction: one conversion from process outcome to
ExecutionResult, exclusive timing phases (a dependency build before a
retried check now reportspreliminary_checkandbuildseparately), a
failed support module keeps every earlier support transcript,profile
keeps the failing warmup, and a process killed by a signal reports the new
crashedverdict rather thanrejected. -
Progress observers are strictly observational: a failing callback is
recorded on the emitter and never fails or rolls back an operation; the
console renderer always shuts down; repeated counted operations with the
same label print their checkpoints again;lean-runerror messages name
the flags the parser actually accepts. -
Extract shared primitives into internal modules (
_archive,_platform,
_sources,_project_identity,_git,_process,_transaction,
_relpath,_results,_cancellation) so high-level modules no longer
serve as each other's utility libraries. -
Shorten source-build environment staging names so deeply nested Mathlib
artifacts remain below legacyMAX_PATHwhileleantarhydrates the cache
on Windows. The previous PID plus full-UUID name put some artifacts at
exactly 260 characters, where hydration failed withos error 3and forced
users toward a full Mathlib source build. -
Hydrate Mathlib's upstream build cache when
newhas no exact shared project
or downloadable environment to seed from. The cold-start fallback previously
opened the catalog environment without enabling the trusted URL-keyed
accelerator, so it skippedlake exe cache getand compiled all of Mathlib
from source.