Browse documentation

Current writer default: v4 (requires opentine 0.26+). Legacy v1/v2 files and v3 repositories remain readable. Bare tine migrate now writes a sibling file; use --dry-run for preview only. Read upgrade notes.

Docs target stable release v0.27.0.Stable vs main checked 2026-11-02

Upgrade to v0.27

Terminal
python -m pip install --upgrade "opentine==0.27.0"
tine migrate old.tine --dry-run
tine replay run.tine --verify --min-fidelity exact --json

v4 is the default writer

Since v0.26, Run.save, run, record, imports, forks, and final replay writes default to tine-artifact/4. New repositories use object format 4; an existing repository is marked format 4 before its first current-format object write. Files and repositories written in v4 require opentine 0.26 or newer. Older clients refuse rather than silently misread them.

Existing v1/v2 files and v3 repositories remain readable and verifiable. Reading alone never rewrites them. Autosave draft checkpoints remain v2; final writes use v4. Storage layout versions and compression wrappers are separate from the object-format version.

Migration now writes by default

Terminal
# Preview only — use this in scripts that previously relied on the default
tine migrate old.tine --dry-run
# Writes old.v4.tine beside old.tine; source stays unchanged
tine migrate old.tine
# Choose an explicit destination
tine migrate old.tine --to v4 -o upgraded.tine

Do not assume a bare migrate command is read-only. In-place migration is a separate explicit option, keeps a backup, and orphans signatures, attestations, and evidence manifests made over the original bytes. Re-verify and re-sign the result as needed; upgrading does not convert an old authenticity claim into a new one.

Sharing with older clients

Terminal
# Deprecated legacy portable writer for one command
tine --format 2 record --save legacy.tine -- python agent.py
# Inspect global writer options
tine --help

OPENTINE_FORMAT=2 selects legacy portable output; 3 selects the legacy repository writer. These deprecated writers warn once per process. Unset or 4 selects v4, but explicit OPENTINE_FORMAT=4 is strict: it refuses unsupported legacy blocks. With the variable unset, some runs v4 cannot represent fall back to v2 with stderr and metadata warnings. Inspect the actual saved format rather than assuming every default save is v4.

Numeric and signature boundaries

Explicit v4 writes refuse non-finite numbers and integers beyond 2**53−1. Live capture paths retain offending values as exact decimal strings with field-path warnings rather than rounding or crashing. Current v4 signatures use tine-sig/3; Ed25519 run attestations use tine-attest/2. Legacy schemes remain verifiable. See format details.

Replay gates

Replay labels are exact, recomputed-match, unavailable, and diverged, strongest to weakest. Overall fidelity is the weakest step. --min-fidelity requires --verify and exits 1 below the selected threshold. Exact means cached recorded content, not a fresh model producing the same answer.

See replay fidelity, offline verification, HTML views, and git sharing. Python remains 3.11–3.14.