Repository navigation
tether 0.1.0a2
Pre-release
Pre-release
Changelog
All notable changes to this project are documented here. The format is based on
Keep a Changelog, and this project
adheres to Semantic Versioning.
[Unreleased]
[0.1.0a2] - 2026-09-05
Added
- Detached bases and native history:
tether add --at <id>registers an
object at a specific snapshot / version / commit / tag instead of a branch
head (commitpins it,newforks from it,openreads it),tether log
lists a system's native history newest first with branches, tags, and pins
marked (--kindbrowses before registering), and--pickchooses the base
interactively. Backed byCapability.HISTORY,ObjectBackend.history, and
HistoryEntry; implemented for icechunk, lance, iceberg, delta, ducklake,
lakefs, dolt, git, and memory (neon and file refuseat). The conformance
suite checkshistoryandatfor everyHISTORYbackend.
[0.1.0a1] - 2026-09-05
Re-release of 0.1.0 under an alpha version. 0.1.0 was published to PyPI
without a pre-release marker and has been removed; its code is this release.
Added
- Initial project scaffold.
- Manifest model (
tether.toml, per-object manifests, workspace state) with
canonical hashing and content-addressed pin ids. - VCS adapters for
jjandgitwith stale-working-copy detection. - Backend protocol with declared capability tiers, in-memory reference backend,
and an importable, capability-parametrized conformance suite. - Orchestration engine: fan-out snapshot, status, commit, new, open, verify, gc.
- Backends:
file,icechunk,neon,git,iceberg. - Typer CLI (
tether). - Backends:
delta(Addressable, retention-bound),lance(Forkable: tags on
(branch, version), branches),lakefs(Forkable: tags, branches, dirty
staging detection). Handles:DeltaHandle,LanceHandle,LakeFSHandle. filebackend supports GCS (gs://) and Azure Blob (az://,abfs://)
alongside S3 through obstore;--file versionedrecords GCS generations and
Azure version ids like S3 version ids.VcsAdapter.files_at/iter_history_files: batched manifest reads through
onegit cat-file --batchprocess (also for jj repos).- CLI:
tether add --repository/--prefixfor lakeFS locators. - Backends:
ducklake(Addressable, retention-bound: catalog-wide snapshot ids
via DuckDB'sducklakeextension, time travel throughSNAPSHOT_VERSION) and
dolt(Forkable over the MySQL protocol:dolt_branches/dolt_tagssystem
tables,DOLT_TAG/DOLT_BRANCHprocedures, dirty working-set detection).
Handles:DuckLakeHandle(owns its attachment; context manager),
DoltHandle(db/refrevision URL). CLI:--host/--port/--table. - Content diffs:
Capability.DIFF,ObjectBackend.diff(locator, a, b, *, listings)returning anObjectDiff(unit, added/removed/modified counts,
capped entries), andtether diff --content [--limit N](Repo.diff(..., content=True)), fanned out across changed objects with per-object errors.
Implemented natively forfile,git,icechunk,iceberg,delta,
lance,lakefs,ducklake,dolt, andmemory; the conformance suite
checksdifffor everyDIFFbackend. - Listings:
ObjectBackend.listing(locator, state)lets a backend attach a
detailed description of a state; the engine stores it content-addressed under
.tether/listings/<hash>.jsonl, commits it with the manifests, reads it back
(working tree or VCS) for diffs, and prunes unreferenced ones ingc. The
filebackend uses it for directory/prefix listings so Observed directories
diff file by file. - Documentation site built with Great Docs
(great-docs.yml,docsdependency group pinninggreat-docsand
quarto-cli,.github/workflows/docs.ymldeploying to GitHub Pages). The
API reference is generated from docstrings, the CLI reference from the Typer
app (mirrored onto real Click objects bytether._clickdoc, since Typer
vendors its own Click), and the user guide lives inuser_guide/: getting
started, concepts, pinning (worked example), branching and writing (worked
example), CLI guide, configuration, backends, writing a backend. - Docstrings: Google-style
Args/Returns/Raiseson everyRepomethod,
attribute docstrings on result types, handles,Capability,Tier,
VerifyStatus, and diff types; help text on every CLI option. The package
root re-exports the result types, manifest helpers, and thehandles,
backends,testing, andvcssubmodules. tether.Policyandtether.Pinare exported from the package root.tether.toml's[snapshot] autonow sets the CLI default for
status/commitsnapshotting (--no-snapshotstill wins) and
[new] auto_forkmakescommitre-fork working refs afterwards; both keys
were previously parsed but unused.
Changed
- Versions are PEP 440 pre-releases (
0.1.0aN) while the project is alpha;
tether.__version__now comes from the installed distribution metadata
instead of a duplicated constant. - The distribution is published as
tether-vcs(PyPI prohibits the bare name
tether); the importable package and the CLI remaintether. Install with
pip install tether-vcs[...]. - The
s3extra now installsobstoreinstead ofboto3;objectstore,
gcs, andazureextras are aliases for the same dependency. gcandverify --all-historystream history through a single object
reader, parse each distinct manifest once, and verify each distinct
(system, state, pin)once, concurrently (~280x faster on a 200-commit repo).verifyand the fork step ofnewfan out concurrently; the fan-out pool
grew from 8 to 16 workers.- Local directory fingerprints walk with
os.scandir(~7x cheaper per file
thanPath.rglob+stat).