Docs target current release v0.5.0.v0.6.0 is in development

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.5 reads v1 and v2 portable files. Loading v1 migrates only in memory; re-saving writes v2. Published v0.3 and v0.4 artifacts remain covered by the stored-data compatibility gate. Version 0.1.x cannot read v2.

See the current v0.5 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.