Skip to content

Bug: lore sync to an older revision silently skipped materializing one tracked file (Status: Deleted, no error) #126

Description

@Segurad27

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions