Docs target current release v0.7.0.v0.7.1 is under review

Artifact migration

tine migrate: portable v1 to v2

Upgrade an old portable artifact through the pure migration registry. Versioned sources are verified before migration; the legacy linear format has no current-format digest to verify and is handled as a best-effort import.

Terminal
tine migrate <run_id> [--dry-run] [--save PATH | --in-place]

# Preview without writing
tine migrate old.tine --dry-run

# Preserve the source
tine migrate old.tine --save old-v2.tine

# Replace the source
tine migrate old.tine --in-place

Default safety

tine migrate only previews unless --save or --in-place is supplied. Combining --dry-run with either write option is refused. Migration removes an existing signature, so re-sign the result. --force both permits a failed source digest and overwrites an existing --save destination; review both effects.

Compatibility

opentine 0.7 reads v1 and v2 portable files. Loading v1 migrates only in memory; re-saving writes v2. Stored data written by releases v0.3 through v0.6 remains covered by the compatibility gate. Version 0.1.x cannot read v2.

See the current v0.7 guide and the historical v1-to-v2 guide.

tine migrate-v3: v2 file to v3 repository

Terminal
tine init .
tine migrate-v3 result.tine --repo . --ref heads/imported

# Explicit escape hatch for a failed source integrity check
tine migrate-v3 result.tine --repo . --ref heads/quarantine --allow-unverified

This is an import, not an in-place file-format upgrade. It retains the exact source bytes as a legacy blob, records the original verification result, redacts and re-hashes structured content as v3 objects, and stores a deterministic old-step-ID to event-ID map. A v2 signature authenticates only the legacy blob, never the new v3 objects.

The importer is fail-closed by default. The exact legacy blob is intentionally unredacted and may contain secrets from the source artifact; review it before synchronization. See the v0.3 repository migration guide.