Commit Graph
3775 Commits
Author SHA1 Message Date
francoisgnandClaude Opus 5.5 8ada8a196a Merge #2701@142e496f5 (a failed lookup isn't "not found"; no timer on found libraries) into round3a-integration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:34:24 +03:00
francoisgnandClaude Opus 5.5 142e496f5b #1290: a failed lookup isn't "not found"; recent libraries aren't checked on a timer
CodeRabbit on #2689:
- `unavailable` used `exists()` / `is_dir()`, which are false for any
  error: a parent folder that can't be read or a share that timed out came
  out as "Not found" and greyed the entry out. Only an absent path is "not
  found" now; other lookup errors are "This library couldn't be checked:
  <reason>" (LookupFailed), and a folder that refuses to be listed is no
  longer counted as missing either (it is there: permissions, macOS
  privacy), so neither is greyed out and opening says why.
- Every recent library was checked again every 30 s while the app ran,
  waking external drives and network shares. A library not found is looked
  for again every 30 s (a drive plugged back in; an absent path wakes
  nothing); the others only when the window comes back to the front, for
  the 8 entries shown; paths never checked are checked once.
Tests a_failed_lookup_doesnt_mark_a_recent_library_missing and
recent_libraries_are_checked_again_only_when_the_window_comes_back fail with
the old lookup / the old timer / no timer for libraries not found.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:34:11 +03:00
francoisgnandClaude Opus 5.5 dc3263065e Round 3a: an open slider drag ends before a rating or a deletion moves the selection on
CodeRabbit on #2689 (head 02743d187):
- crates/engine/src/cmd/library.rs: `cull` (#2327: a rating, flag or label
  that takes the active photo out of the view) and `photo.delete` /
  `photo.deletePermanently` moved the active photo without ending an open
  interaction, unlike `step` and `library.select`: the drag stayed open with
  no undo step. Each ends it now before its own change, so the drag is its
  own undo step and comes first: undo brings the rating or the photo back,
  with its edit, then the edit (Delete Permanently's undo restores the
  edit too). Test an_open_edit_ends_before_the_selection_moves_on (rating,
  delete, delete permanently) fails without the fix.
- docs/parity-checklist.md (LR-BEHAV-LOCALIZE) and docs/localization.md: list
  every shipped language (Polish, and the others the row lacked; Italian in
  the localization doc).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:30:45 +03:00
francoisgnandClaude Opus 5.5 02743d187d Merge PR #1922@6c17d29ae (middle-button pan whatever the tool) into round3a-integration
crates/ui-egui/src/lib.rs: the batch's module list (tests_capture_time) with
#1922's. LR-VIEW-ZOOM: the batch's row plus #1922's middle-button sentence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:45:31 +03:00
francoisgnandClaude Opus 5.5 2e8a50a40c Merge PR #1914@2f88d847f into round3a-integration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:44:32 +03:00
francoisgnandClaude Opus 5.5 c5df3eea40 Merge #2701@f56e8c67a (its upstream merge) into round3a-integration
Docs only, and the batch's side already holds everything #2701's merge
resolved (its rows that differ are main's rows other batch PRs edited).
Tracker summary recomputed (`cargo xtask parity --write`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:43:16 +03:00
KetbomeandClaude Opus 5.5 2f88d847f4 LR-BEHAV-DIALOGS: a backdrop click that closes an open dropdown keeps the dialog
Read whether a popup is open before the dialog window is drawn: drawing it
closes a dropdown the click lands outside of, so a quick click (pressed and
released in one frame) used to see no popup and close the dialog too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:34:47 -03:00
francoisgnandClaude Opus 5.5 f56e8c67a7 Merge upstream/main (integration batch 43) into feat/issue-1290-launch-library-choice
docs/parity-checklist.md: header lists both sides' changes, revision rows of
both sides newest-first, summary recomputed (`cargo xtask parity --write`).
docs/whats-new.md: #1290's entry joins upstream's 2026-10-23 section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:32:25 +03:00
francoisgnandClaude Opus 5.5 987c54bb51 Merge PR #1499@8d71b7999 (graphic watermarks and HDR JPEG size limits, onto batch 43) into round3a-integration
docs/parity-checklist.md: header lists both sides' changes; #1499's two new
dated prose entries (2026-10-23, 2026-10-24) become revision rows like its
two earlier ones, so the history stays one table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:27:33 +03:00
francoisgnandClaude Opus 5.5 144d900c21 Merge upstream/main (integration batch 43, #2729, #2737, #2412) into round3a-integration
Conflicts:
- apps/lightcraft/src/native_menu.rs: upstream's item swapping (macOS keys
  given up for real, Help menu not swapped, Settings / Quit tracked) with
  KEY-GRID's keymap-aware rows. `Item.label` stays the text the row shows
  (native_item_presentation), so `Item::native_label` reuses it instead of
  formatting it again; Settings / Quit store theirs through
  display_item_label, as upstream's native_label did. No early return after
  a rebuild (upstream).
- crates/ui-egui/src/i18n.rs: upstream's tests (#2729: one test per check
  across languages, gaps reported, never a failure) plus the batch's two new
  ones (dropped-photos notice, Polish counts); production code as merged.
- grid.rs, keyword_list.rs, masking.rs: the translation tests #2729 removed
  stay removed; the batch's new keyword and segmenter tests stay.
- cmd/library.rs, ui-egui/src/lib.rs: both test modules, each with its
  #[cfg(test)].
- xtask/src/main.rs: #2302's test_selected and upstream's translation_gaps.
- docs: tracker / gap rows take both sides' edits, headers list both sides'
  changes, history rows of both sides newest-first. What's New: one section
  per date, newest first (the batch had 10-22 above 10-23, and second 10-21
  and 10-19 sections); no line lost.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:26:48 +03:00
KetbomeandClaude Opus 5.5 6c17d29aed LR-VIEW-ZOOM: a middle-button drag pans the photo whatever tool is active
In Detail, dragging with the middle button (the mouse wheel pressed) pans the
zoomed photo with a hand cursor, in every tool. Remove / Heal / Clone, the
mask brushes and Crop no longer have to be left to look around a zoomed photo,
and they don't paint or move during that drag: it is handled with the pinch and
scroll gestures, before the tool overlays.

Right-click keeps the photo's context menu and Space keeps the zoom toggle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:17:57 -03:00
nevicia2010-hub 8d71b79993 LR-EXP-WATERMARK: integrate batch 43 while preserving export fixes 2026-10-24 00:14:33 +02:00
nevicia2010-hub 11bbada692 LR-EXP: integrate upstream export changes and parity records 2026-10-24 00:01:09 +02:00
Brandon Thomas 98702b5c44 Merge PR #2744: integration batch 43 (21 community PRs)
Integration batch 43: 21 community PRs
2026-10-23 17:36:11 -04:00
Brandon ThomasandClaude Opus 5.5 82eef5b266 Integration: What's New lists 2026-10-23 above 2026-10-22
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:21:34 -04:00
Brandon Thomas 73f1b4906e Merge PR #2622
# Conflicts:
#	docs/gaps.md
2026-10-23 17:21:18 -04:00
Brandon Thomas 1acd2938ea Merge PR #2546
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-23 17:21:18 -04:00
Brandon Thomas 708e8a8bfc Merge PR #2688
# Conflicts:
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-23 17:21:17 -04:00
Brandon Thomas 92bd08ba5c Merge PR #2618
# Conflicts:
#	docs/whats-new.md
2026-10-23 17:21:17 -04:00
Brandon Thomas bbf9b713f2 Merge PR #2526
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-23 17:21:17 -04:00
Brandon Thomas e700170dc6 Merge PR #2727
# Conflicts:
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-23 17:21:17 -04:00
Brandon Thomas b106ceaca1 Merge PR #2621
# Conflicts:
#	docs/whats-new.md
2026-10-23 17:21:16 -04:00
Brandon Thomas 0605272e69 Merge PR #2620 2026-10-23 17:21:16 -04:00
Brandon Thomas 4d9914d4db Merge PR #2709 2026-10-23 17:21:16 -04:00
Brandon Thomas 652fa88c12 Merge PR #2670 2026-10-23 17:21:16 -04:00
Brandon Thomas d7763492c4 Merge PR #2210 2026-10-23 17:21:16 -04:00
Brandon Thomas c342c480cf Merge PR #2665 2026-10-23 17:21:16 -04:00
Brandon Thomas a344e277f0 Merge PR #2728 2026-10-23 17:21:16 -04:00
Brandon Thomas 433ce2375d Merge PR #2109 2026-10-23 17:21:16 -04:00
Brandon Thomas 8c52e2ee95 Merge PR #2630 2026-10-23 17:21:16 -04:00
Brandon Thomas 3ab88f50ac Merge PR #2612 2026-10-23 17:21:16 -04:00
Brandon Thomas cb94eb0e3a Merge PR #2626 2026-10-23 17:21:16 -04:00
Brandon Thomas 4f30720374 Merge PR #2702 2026-10-23 17:21:16 -04:00
Brandon Thomas 6a9e1b504f Merge PR #2694 2026-10-23 17:21:16 -04:00
Brandon Thomas d9db2d32e7 Merge PR #2596 2026-10-23 17:21:16 -04:00
Brandon Thomas e44cbc8725 Merge PR #2543 2026-10-23 17:21:16 -04:00
Brandon ThomasandClaude Opus 5.5 5e5602b4ca Enable Filters: Find Similar turns filtering back on; a filter put aside follows renamed keywords, people and folders
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:20:11 -04:00
Brandon ThomasandClaude Opus 5.5 089bf60ede Colour-range mask: mask.update caps the samples too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:13:39 -04:00
francoisgnandClaude Opus 5.5 ce339b0b66 Merge #2701@c6fe7281f (no drop toast on frames with nothing dropped) into round3a-integration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:10:14 +03:00
francoisgnandClaude Opus 5.5 85947ca069 Round 3a: the failing-download test no longer races the mirror's 404
tests_segment::a_failing_download_ends_with_an_error_and_never_blocks
checks that a second download request while one runs starts nothing. Its
local mirror answered 404 at once, so on a loaded runner the first
download could end before the second request, which then rightly started
a new one: the assertion failed (upstream's gate on #2689, 5223c8095). The
mirror's first answer now waits until the second request is made. A
300 ms pause between the two requests failed the test before and passes
now. Test code only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:10:12 +03:00
Brandon ThomasandClaude Opus 5.5 4d3ea22e9c Masking: drop the one-off overlay screenshot example and its png dev-dependency
Keeps CanvasMap::new and mask_overlay private to detail.rs again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:06:43 -04:00
Dylan M. Taylor 5ca49b3eab ci(sonar): don't cancel superseded runs on main, so coverage is published (#2737) 2026-10-23 17:01:32 -04:00
aiongg b264557916 i18n: missing translations are reported, never a failure (#2729)
A message a catalog lacks, or translates as an empty string, shows in
English and fails nothing:

- build.rs no longer requires every formats catalog to carry the same
  messages, and tr_format! gets a last arm that formats the English
  source, so a message no catalog has builds.
- Coverage tests (every language translates X) and tests of one
  language's exact wording are gone; the language-switching, layout,
  date, placeholder and user-value tests read the catalog's own value
  instead of a hard-coded translation.
- i18n::tests::translation_gaps_report lists, per language, the plain
  and format messages it lacks and its untranslated What's New lines.
  It always passes; cargo xtask ci
  runs it from the test step's binary after the tests.
- catalogs_load checks that every catalog file is a JSON object of
  strings with each key once; it.json named "Dimensions" twice.
2026-10-23 16:42:28 -04:00
aiongg d71b83b2bc Catalog import: resolve catalog paths with craft-docpath's resolve_absolute (#2412)
doc_path::resolve uses craft_docpath::resolve_absolute; a path that resolves but is not absolute here is reported as not on this computer. Adds tests for Windows-form, GVFS-relative and colon-in-name paths, and a git-sources check in nix.yml and release.yml.
2026-10-23 16:42:09 -04:00
francoisgnandClaude Opus 5.5 c6fe7281f5 #1290: no drop toast on frames with nothing dropped
The drop code runs every frame, mostly with nothing dropped; while the
launch list was up, hold_dropped then toasted "The photos are imported once
a library is open" on every frame, hiding any other toast (the presets
one among them). An empty drop is a no-op now. Found by CodeRabbit on
#2701; the test steps frames with the list up and fails without the fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 23:25:40 +03:00
Nathaniel Ledford c13875f77d LR-BEHAV-ACCESS: the feature row records the dialog Tab order and its test 2026-10-23 15:33:59 -04:00
NetterSilverandClaude Haiku 5.5 c7cff2d9a7 Fix smart album gte/lte rules missing equal f-number and focal length
Found while testing crates/catalog/src/rules.rs:673 (num_op), reached via Rule::matches at :956-957

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 21:24:32 +02:00
Nathaniel Ledford aae03c8f47 LR-BEHAV-ACCESS: Tab leaves the name field of a dialog
dialog_field took the focus back every frame while the field wasn't being edited, so Tab never
reached the check box, Cancel or OK of New Album, New Smart Album, Save Metadata Preset and the
other one-field dialogs. It now takes the focus once, when the dialog opens (the way the keyword
dialogs already did).
2026-10-23 15:20:09 -04:00
Nathaniel Ledford f0cdb20a86 Tests: a photo chosen during an import is chosen while the import is held, not while a clock runs 2026-10-23 15:10:15 -04:00
francoisgnandClaude Opus 5.5 5223c80954 Merge #2701@da434b059 (presets dropped with no library open are refused) into round3a-integration
crates/ui-egui/src/lib.rs: the batch's handle_dropped_files refuses presets
while no library is open, as #2701 does. The drop card says so, and its
"photos wait" line is desktop-only (the web build's drops import into its
session as before). photos_dropped_with_no_library_open_wait_for_one also
drops a preset; LR-IMP-DRAGDROP row updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:05:14 +03:00