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.
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-placeDefault 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
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-unverifiedThis 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.