Upgrade to v0.27
python -m pip install --upgrade "opentine==0.27.0"
tine migrate old.tine --dry-run
tine replay run.tine --verify --min-fidelity exact --jsonv4 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
# 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.tineDo 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
# Deprecated legacy portable writer for one command
tine --format 2 record --save legacy.tine -- python agent.py
# Inspect global writer options
tine --helpOPENTINE_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.