lightcraft/crates
Nathaniel Ledford 4e3b15ff6f
LRC-LIB-SMARTCOLL: smart albums can test other smart albums (loops refused and survived)
An Album rule may now name a smart album: "Keywords contain travel"
and "Album isn't Excluded Photos" (red or rejected) leaves out whatever
Excluded Photos matches, as its rules change. Smart albums used to be
refused for this.

Loops:
- RuleSet::check_for(cat, owner) refuses an Album rule that would make
  the owner include itself, directly or through other smart albums
  (Issue::AlbumLoop). Catalog::album_reaches walks the references with
  a seen-set; RuleSet::albums_tested lists them. album.setRules checks
  for the album being edited, and smart_album_problems reports a loop
  saved anyway.
- Matching never recurses without end: album_contains evaluates a smart
  album's rules through rules::evaluating, a thread-local stack of
  albums being evaluated with a 32-deep cap. An album already on it (a
  saved loop) holds nothing, and the stack is restored by a drop guard
  however evaluation ends. A test builds A → B → C → A and checks that
  every album returns and reports the loop.

The issue "can't test a smart album" is replaced by the loop issue in
all seven locales. The sidebar counts already refresh while any smart
album uses "in the last…", so an album testing one is covered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:54:57 -04:00
..
catalog LRC-LIB-SMARTCOLL: smart albums can test other smart albums (loops refused and survived) 2026-10-09 10:54:57 -04:00
codecs HEIC: as_chunks for 16-bit samples (clippy 1.99, caught by the new heif CI step) 2026-10-08 23:57:22 -04:00
color Issue #188: D65 reads as a small positive tint (test from #336) 2026-10-08 17:26:01 +00:00
denoise LR-EDIT-DETAIL-DENOISE: address installation and model-policy review 2026-10-08 22:07:23 -04:00
denoise-core LR-EDIT-DETAIL-DENOISE: address installation and model-policy review 2026-10-08 22:07:23 -04:00
develop LR-EDIT-DETAIL-DENOISE: non-destructive AI RAW denoise with pure-Rust CPU/GPU 2026-10-08 22:07:20 -04:00
engine LRC-LIB-SMARTCOLL: smart albums can test other smart albums (loops refused and survived) 2026-10-09 10:54:57 -04:00
faces LR-PREF-PEOPLE: update pure-Rust recognition and preserve valid model replacements 2026-10-08 22:29:31 -04:00
fetch Fetch: say where the bearer token goes (#259) 2026-10-08 17:55:31 +00:00
geom Crop: drag_crop domain operation for handle drags (#295) 2026-10-08 10:35:46 -04:00
gpu LR-BEHAV-GPU: compile DX12 shaders with FXC, never a stray dxcompiler.dll (issue #471) 2026-10-09 04:34:51 -05:00
heif LR-IMP-FORMATS: HEIC/HEIF decode behind the optional `heif` feature 2026-10-08 12:45:33 -04:00
mcp Merge the faces stack (#172/#173/#174, integrate-batch-14) into AI RAW denoise (#384) 2026-10-09 00:29:59 -04:00
merge LR-IMP-FORMATS: read DNG BaselineSharpness and keep it in DNG exports 2026-10-08 18:18:54 -07:00
meta M11.1: add CR3 decoding 2026-10-08 22:22:13 +03:00
pipeline LR-EDIT-COLOR-TEMP: camera-space white balance for raws with a colour matrix 2026-10-08 18:18:54 -07:00
preview Thumbnails: retire the replaced preview cache so its old jobs can't write 2026-10-07 20:23:17 -04:00
raster Merge pull request #56 from storytold/pr/never-crash-core 2026-10-04 14:23:22 -04:00
raw Merge PR #465 2026-10-09 08:34:42 -04:00
scenes Never crash: color, geom, raster, develop, scenes, preview, pipeline 2026-10-04 12:34:53 -04:00
segment LR-EDIT-DETAIL-DENOISE: list settings tabs from TABS; fix the SAM 3 worker's wasm check 2026-10-09 01:07:43 -04:00
sysmem Never crash: move the one unsafe FFI call into crates/sysmem 2026-10-05 02:06:08 -04:00
tiff LR-MASK-SKY: AI masks use DNG semantic mattes (iPhone ProRAW sky matte) 2026-10-08 18:18:54 -07:00
ui-egui LRC-LIB-SMARTCOLL: smart albums can test other smart albums (loops refused and survived) 2026-10-09 10:54:57 -04:00