Environment
- Lore v0.8.4 (CLI + loreserver), Windows 11
- Local server over
lore://127.0.0.1, single user, single branch
- Working copy is an Unreal Engine 5.8 project
Summary
Syncing back to an older revision materialized every file in the target
revision's tree except one — with no error or warning. The skipped file was
tracked at the target revision (lore file info showed a valid size and
content hash) but reported Status: Deleted, i.e. tracked-but-absent-on-disk.
Severity comes from the silence: if the incomplete state isn't caught, any
follow-up (e.g. recording the restored state as a new head) publishes a
"restored" revision that is missing a file.
Occurrence (observed once)
# head = rev N+1, which recorded D Content/HelloMoto1.uasset among ~146 deletions
lore sync <rev N signature> # rev N contains HelloMoto1.uasset
# -> "Calculating deltas ... Verifying 148 changes ..." — no errors
# -> 147 files materialized on disk; Content/HelloMoto1.uasset NOT written
lore file info Content/HelloMoto1.uasset
# Path: Content/HelloMoto1.uasset
# Size: 23570 <- valid
# Hash: f52a40b1... <- valid
# Status: Deleted <- tracked at current revision but missing on disk
Recovery: lore reset Content/HelloMoto1.uasset materialized the file
correctly (content verified).
Reproducibility
Not deterministic — a later, smaller-scale attempt with the same shape
(file added in rev A, deleted in rev A+1, sync back to rev A) using a plain
.txt file materialized the file correctly. Known differences between the
occurrences:
- Failing case:
.uasset, part of a ~148-change delta; the file had been
added in the target revision itself (its entire tracked lifespan equaled
the sync delta); Unreal editor open with the file's Blueprint class loaded.
- Succeeding case:
.txt, 1-file delta, editor state irrelevant to the file.
Expected
lore sync <revision> materializes every file in the target revision's tree,
or errors loudly.
Actual
One file skipped silently; discoverable only by manually checking
lore file info / disk afterwards.
Suggested detection/mitigation
Even without a root cause, a post-sync verification pass (or a non-zero exit
- warning listing tracked-but-missing files) would convert the silent
omission into a visible one. Current user-side workaround: after any backward
sync, scan for Status: Deleted entries and lore reset them.
Environment
lore://127.0.0.1, single user, single branchSummary
Syncing back to an older revision materialized every file in the target
revision's tree except one — with no error or warning. The skipped file was
tracked at the target revision (
lore file infoshowed a valid size andcontent hash) but reported
Status: Deleted, i.e. tracked-but-absent-on-disk.Severity comes from the silence: if the incomplete state isn't caught, any
follow-up (e.g. recording the restored state as a new head) publishes a
"restored" revision that is missing a file.
Occurrence (observed once)
Recovery:
lore reset Content/HelloMoto1.uassetmaterialized the filecorrectly (content verified).
Reproducibility
Not deterministic — a later, smaller-scale attempt with the same shape
(file added in rev A, deleted in rev A+1, sync back to rev A) using a plain
.txtfile materialized the file correctly. Known differences between theoccurrences:
.uasset, part of a ~148-change delta; the file had beenadded in the target revision itself (its entire tracked lifespan equaled
the sync delta); Unreal editor open with the file's Blueprint class loaded.
.txt, 1-file delta, editor state irrelevant to the file.Expected
lore sync <revision>materializes every file in the target revision's tree,or errors loudly.
Actual
One file skipped silently; discoverable only by manually checking
lore file info/ disk afterwards.Suggested detection/mitigation
Even without a root cause, a post-sync verification pass (or a non-zero exit
omission into a visible one. Current user-side workaround: after any backward
sync, scan for
Status: Deletedentries andlore resetthem.