Lower-priority findings from the cross-repo review of photo versions (#191 / PR #193). The must-fix items are handled on the PR itself. None of these risks originals.
Name-link candidate starvation.unlinked_name_candidates (database/version_dao.rs ~704) uses ORDER BY id LIMIT 500 with patterns like %.edit.%. Rows that match but have no resolvable original come back every tick, so 500 of them would permanently starve later candidates. Page by an id > last_seen cursor, or record tried candidates.
Stranded annotations, and an unscoped canonical path.
A favorite or tag set on a version's own path before it was linked can't be removed or read afterwards, because reads and writes now canonicalise to the original. Migrate or merge annotations from the version path into the original at link time.
canonical_rel_path (version_dao.rs ~268) matches v.rel_path = ? across all libraries. Scope it by library.
aiedits/ folders that hold only hidden versions still appear in non-recursive dirs and open empty. Hide a dir when everything under it is a hidden version, or leave it with a count.
Minor:
PUT /image/versions/display doesn't invalidate precomputed reels, so they keep the old display file.
A manual date set on a version path returns success, then reverts on the next metadata sync. Canonicalise it to the original, as tags do.
link_versions --reviewed checks the version hash but not the TSV's original_hash.
Lower-priority findings from the cross-repo review of photo versions (#191 / PR #193). The must-fix items are handled on the PR itself. None of these risks originals.
1. **Name-link candidate starvation.** `unlinked_name_candidates` (`database/version_dao.rs` ~704) uses `ORDER BY id LIMIT 500` with patterns like `%.edit.%`. Rows that match but have no resolvable original come back every tick, so 500 of them would permanently starve later candidates. Page by an `id > last_seen` cursor, or record tried candidates.
2. **Stranded annotations, and an unscoped canonical path.**
- A favorite or tag set on a version's own path *before* it was linked can't be removed or read afterwards, because reads and writes now canonicalise to the original. Migrate or merge annotations from the version path into the original at link time.
- `canonical_rel_path` (version_dao.rs ~268) matches `v.rel_path = ?` across all libraries. Scope it by library.
3. **`aiedits/` folders that hold only hidden versions** still appear in non-recursive `dirs` and open empty. Hide a dir when everything under it is a hidden version, or leave it with a count.
4. **Minor:**
- `PUT /image/versions/display` doesn't invalidate precomputed reels, so they keep the old display file.
- A manual date set on a version path returns success, then reverts on the next metadata sync. Canonicalise it to the original, as tags do.
- `link_versions --reviewed` checks the version hash but not the TSV's `original_hash`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Lower-priority findings from the cross-repo review of photo versions (#191 / PR #193). The must-fix items are handled on the PR itself. None of these risks originals.
unlinked_name_candidates(database/version_dao.rs~704) usesORDER BY id LIMIT 500with patterns like%.edit.%. Rows that match but have no resolvable original come back every tick, so 500 of them would permanently starve later candidates. Page by anid > last_seencursor, or record tried candidates.canonical_rel_path(version_dao.rs ~268) matchesv.rel_path = ?across all libraries. Scope it by library.aiedits/folders that hold only hidden versions still appear in non-recursivedirsand open empty. Hide a dir when everything under it is a hidden version, or leave it with a count.PUT /image/versions/displaydoesn't invalidate precomputed reels, so they keep the old display file.link_versions --reviewedchecks the version hash but not the TSV'soriginal_hash.