D 2026-05-04T19:03:02 T +sym-v0.5.0 764a82ecdbcfe68409915451d56b25e18968d97d7db53c0c08b9d7cfdca57fa9 -\s**`Repo.UUIDFromRID(rid\sint64)\s(string,\serror)`**\s—\spublic\slookup\sthat\sreturns\sthe\sUUID\sfor\sa\sgiven\sRID,\sreplacing\sthe\sconsumer\spattern\sof\sreaching\sinto\s`r.DB()`\sto\srun\s`SELECT\suuid\sFROM\sblob\sWHERE\srid\s=\s?`.\sReturns\s`ErrArtifactNotFound`\s(matchable\svia\s`errors.Is`)\swhen\sthe\sRID\sdoes\snot\sexist.\s(#23,\s#25)\n-\s**`Repo.Diff`\saccepts\s`filePath\s==\s""`\sfor\swhole-checkin\sdiffs.**\sWhen\scalled\swith\san\sempty\s`filePath`,\s`Diff`\snow\sreturns\sone\s`DiffEntry`\sper\sfile\schanged\sbetween\s`ridA`\sand\s`ridB`,\sdeterministically\sordered\sby\sname.\sThe\ssingle-file\sform\s(non-empty\s`filePath`)\sis\sunchanged.\s(#24,\s#26)\n\nNone.\sBoth\schanges\sare\spurely\sadditive\sat\sthe\spublic\sAPI\ssurface.\sCalls\sto\s`Repo.Diff`\swith\sa\snon-empty\s`filePath`\sbehave\sexactly\sas\sbefore.\n\n-\sConsumers\s(bones,\sEdgeSync)\scan\sdrop\stheir\shand-rolled\s`ridToUUID`\shelpers\sin\sfavor\sof\s`Repo.UUIDFromRID`.\sThe\s`errors.Is(err,\slibfossil.ErrArtifactNotFound)`\scheck\sreplaces\sad-hoc\s`sql.ErrNoRows`\smatching.\n-\sConsumers\sbuilding\swhole-checkin\sdiffs\s(e.g.\sEdgeSync's\s`Agent.Diff`)\scan\sreplace\sthe\smanual\s`ListFiles`\s+\sper-file\s`Diff`\senumeration\swith\sa\ssingle\s`repo.Diff(ridA,\sridB,\s"")`\scall.\n-\s**Known\slimitation\sin\swhole-checkin\sDiff:**\srename\sdetection\sand\spermission-only\schanges\sare\snot\syet\sreflected\s—\spure\srenames\scurrently\ssurface\sas\sadd+delete\spairs.\sThe\sunderlying\s`mlink`\swalk\sneeded\sto\sfix\sthis\sis\stracked\sseparately\sand\swill\sland\sin\sa\sfollow-up\srelease.\sThe\ssingle-file\s`Diff`\scodepath\shas\sthe\ssame\slimitation\stoday,\sso\sbehavior\sis\sconsistent\sacross\sboth\sforms. U 93289084+danmestas@users.noreply.github.com Z cb0790489644450208b39d06baf7a198