v0.3.0
Full Changelog: v0.2.1...v0.3.0
[0.3.0] - 2026-07-14
Added
- Canonical
.ledger/ledger.tomldiscovery throughLedgerProjectLocator, with
legacy.ledger.toml,ledger.toml, and caller-provided legacy tool config
discovery retained as a compatibility surface. - Schema-version-2 project manifest parsing through
parse_ledger_project_manifest,
with strict top-level and nested field validation, a required normalized project
UUID, multiple named mounts, repository / workspace / cache storage classes, and
project / checkout scope handling. - Optional machine-local layout config parsing through
parse_ledger_local_config,
includingworkspace_root,cache_root,workspace_provider,cache_provider,
andcheckout_idfields. - Read-only layout resolution through
resolve_ledger_layout, with named
repository, workspace, and cache mounts, fixedprojects/<uuid>/projectand
projects/<uuid>/checkouts/<checkout-id>structural roots, explicit,
environment, local-root, and platform-root precedence, and a deterministic
checkout-ID derivation exposed asderive_checkout_id. platformdirs-backed family roots for the default workspace and cache providers.- Immutable
ResolvedLedgerLayoutandResolvedMountobjects. LedgerLayoutErrorfor invalid or unresolvable Ledger-family layouts.ledgercore/_version.pyistub so strict mypy passes in a pristine source tree.
Compatibility
- Legacy
.ledger.toml,ledger.toml, and caller-provided legacy tool config
discovery remain available as compatibility surfaces; legacy locators report
is_legacy=Trueand are accepted by discovery but rejected by
resolve_ledger_layout. - Legacy locators are discovery and migration inputs only. They cannot be passed
to canonical layout resolution. derive_checkout_idremains importable from the package root for 0.2.x callers
while also being available underledgercore.layout.- No automatic migration is performed. Migration to the canonical layout is
downstream-owned and explicit.
Explicit exclusions
- No private sibling provider support (
workspace_providerorcache_provider
set to a non-default value is accepted by the parser for migration diagnostics
but rejected by the resolver). - No external workspace config support (
config.location == "workspace"is
rejected until the private-provider phase). - No TOML parser, no CLI, and no manifest writer.
- No downstream migration implementation; this release is a core API only.
Added
- Added shared ledger configuration helpers for locating ledger.toml files and selecting project or tool tables
Changed
- Changed core storage and validation behavior for atomic writes, front matter, IDs, and source-tree versions
- Documented Sphinx builds with MyST Markdown and myst-parser dependencies