Skip to content

ods v0.3.4

Choose a tag to compare

@github-actions github-actions released this 23 Aug 10:39
· 27 commits to main since this release

Fixed

  • A stale .git lock wedged a repo out of sync indefinitely. The git-quiesce
    gate treated any *.lock under .git as an in-progress operation, so an
    abandoned lock — e.g. the 0-byte .git/objects/maintenance.lock a crashed
    git maintenance leaves at boot — deferred the repo every cycle, forever. A
    lock now gates only while it is fresh (stale_lock_seconds, default 300 s); an
    older one is treated as the crash artifact it is. This is the underlying cause
    of the claude-config deferral below.
  • A recovered project stayed "needs attention" forever. Two defects in the
    defer path: update_defer_count only ever incremented deferred[id] (never
    reset on a clean cycle, so the count was a lifetime tally, not the "consecutive
    cycles" its escalation claimed), and reconcile never pruned deferred, so a
    counter for a vanished project never cleared. A run now resets the counter for
    every project that synced cleanly and prunes orphaned deferred keys;
    compare/maxDelete (user settings) are left intact. Deferrals now log their
    gate reason (onedrive-busy / git-active) so the escalation is diagnosable.
    Real trigger: a crashed git maintenance left a stale 0-byte
    .git/objects/maintenance.lock, which the git-quiesce gate reads as "git
    active" every cycle — Tools\claude-config had deferred 235 times.
  • Panic on any path containing non-ASCII characters. paths::starts_with_ci
    sliced a &str using len() — a BYTE count — so whenever the prefix length
    landed inside a multi-byte character, the slice panicked with "byte index N is
    not a char boundary"
    . ods add-watch into a Hebrew-named OneDrive folder hit
    it every time (the failure depended on the byte length of the local path, so it
    looked intermittent), and the GUI's add discovery root reached the same code
    with any non-ASCII folder. Prefixes are now compared as byte slices, which
    leaves ASCII behaviour unchanged.

Full Changelog: v0.3.3...v0.3.4