Problem
Existing v18 consumers can have blob-backed retained state that the v19 tree-backed storage boundary correctly rejects with HANDLE_TARGET_TYPE_MISMATCH. API migration alone is insufficient: linking v19 before migrating the retained substrate can allow a concurrent v19 append to strand an authoritative v18 writer.
This is a v19 release blocker, but it must not add legacy compatibility code to the production runtime.
Required work
- Implement the one-shot migrator under
scripts/v18-to-v19/.
- Move any legacy v18 decoding or compatibility logic needed by the operation into that script directory.
- Keep the normal v19 runtime tree-backed and free of legacy read branches.
- Detect an unmigrated v18 substrate before any v19 writer append and return an actionable typed obstruction that names the migration command.
- Rehearse against a disposable repository copy before touching an authoritative ref.
- Translate the retained v18 representation through published git-cas APIs.
- Preserve semantic identity, ordering, timestamps, and application-owned metadata.
- Make the operation idempotent, resumable, and compare-and-swap guarded.
- Keep the original chain reachable under an additive recovery ref until verification succeeds.
- Verify v19 reopen, read, append, remember-equivalent scan, and repository health after migration.
Acceptance criteria
Do not release v19 until this script and its fixture-based proof are complete.
Problem
Existing v18 consumers can have blob-backed retained state that the v19 tree-backed storage boundary correctly rejects with
HANDLE_TARGET_TYPE_MISMATCH. API migration alone is insufficient: linking v19 before migrating the retained substrate can allow a concurrent v19 append to strand an authoritative v18 writer.This is a v19 release blocker, but it must not add legacy compatibility code to the production runtime.
Required work
scripts/v18-to-v19/.Acceptance criteria
scripts/v18-to-v19/; no legacy compatibility reader is added to production source.Do not release v19 until this script and its fixture-based proof are complete.