Commit Graph
3164 Commits
Author SHA1 Message Date
aionggandeliets2 fcd0832355 Integration: #2152 tool descriptions from #2171
Co-authored-by: eliets2 <287273517+eliets2@users.noreply.github.com>
2026-10-21 14:48:57 +00:00
aiongg 145095663b Merge PR #2152: MCP: mark file-writing tools as potentially destructive 2026-10-21 14:48:49 +00:00
aiongg 893fdffc75 Merge PR #2145: Stop export lanes when a panic unwinds the batch thread 2026-10-21 14:48:49 +00:00
aionggandronibalthazar 7f9f97148d Integration: #2178 document the bound (from #2157)
Co-authored-by: ronibalthazar <61232335+ronibalthazar@users.noreply.github.com>
2026-10-21 14:48:45 +00:00
aiongg a4cbdb4937 Merge PR #2012: Detail: Fit is as sharp as the photo 2026-10-21 14:48:42 +00:00
aiongg af5b7bc3c0 Merge PR #2274: Draw the Before label on a dark pill so it reads on light photos (#2247) 2026-10-21 14:48:33 +00:00
aiongg b1b9463e93 Merge PR #2285: LR-LIB-STACK: a double-click on a stack badge toggles the stack once (#2233) 2026-10-21 14:48:33 +00:00
aionggandharanishi fcbbda591c Merge PR #1864: Crop: a fresh crop starts locked to the photo's own shape (#991)
Co-authored-by: haranishi <223786623+haranishi@users.noreply.github.com>
2026-10-21 14:48:33 +00:00
aionggandharanishi 1c4b9c3c61 Integration: #1863 fill the active Pick filter too (from #1044)
Co-authored-by: haranishi <223786623+haranishi@users.noreply.github.com>
2026-10-21 14:48:33 +00:00
aiongg 9bac4fbd88 Merge PR #2178: tiff: bound total entries across a parse (#2136) 2026-10-21 14:48:28 +00:00
aiongg 265b35a975 Merge PR #2101: Reject malformed mask and spot targets before mutation 2026-10-21 14:48:28 +00:00
aiongg df9d830189 Merge PR #2100: Reject fractional command indices before mutation 2026-10-21 14:48:28 +00:00
aionggandharanishi cf2bfa4ece Merge PR #1863: Library: a picked photo's flag is drawn filled (#1013)
Co-authored-by: haranishi <223786623+haranishi@users.noreply.github.com>
2026-10-21 14:48:21 +00:00
aiongg 31dac2db32 Merge PR #2069: Keep the profile dropdown and its submenus inside the window (#2059) 2026-10-21 14:48:21 +00:00
Marco Arnulfo 3ac21d18a5 LR-EXP-BITDEPTH: savePreset from the previous export drops a stored depth its format lacks 2026-10-21 12:40:04 +02:00
Dylan M. Taylor abb49bdd76 ci: switch to shared nix workflow from craft-common-actions (#1980) 2026-10-21 02:38:14 -04:00
Brandon ThomasandClaude Opus 5.5 5fe74557ec Skip CodeRabbit reviews on Dependabot PRs (#2407)
Adds .coderabbit.yaml so CodeRabbit no longer reviews or comments on PRs opened by dependabot[bot].

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 11:38:50 -04:00
Dylan M. Taylor 666f78432b docs: add SonarCloud and CodeRabbit badges to README (#2240)
* docs: add SonarCloud and CodeRabbit badges to README

* docs: put SonarCloud and CodeRabbit badges on their own line
2026-10-20 11:31:44 -04:00
fabiodalez-dev b9c9a97d7a i18n(it): translate the mask overlay views 2026-10-20 16:11:56 +02:00
fabiodalez-dev fa135940e7 i18n(it): native-speaker corrections and every interface string translated
Corrections from my review of #1198: Exposure is Esposizione (not Tempo di esposizione, the shutter time), Sharpening is Nitidezza (not Contrasto), Preset stays Preset in every preset label, and blurry photos are sfocate, not mosse.

Adds the 339 interface messages Italian lacked (print, slideshow, mask effects, faces, HDR, external editors, keywords, focus points and their dialogs) and translates the 60 format strings still in English in it-formats.json. Only the What's New lines stay in English, as before: 2,628 of 3,278 messages.
2026-10-20 16:08:27 +02:00
Matthew James SivakandClaude Opus 5.5 30fea8d34c LR-VIEW-CLIPPING: profiled diagnostic views keep the sRGB histogram; GPU equivalence for the clipping overlays
On a profiled display the Grey and Sharpening-mask views rendered in the display's primaries, so
their histogram counted display-primary pixels, not the photo's sRGB ones. They now render in sRGB
like the clipping views (`Overlay::renders_in_srgb`) and are converted for the display after; they
show no photo colour, so nothing is lost.

The GPU equivalence test now covers Grey (mean/max LSB limits) and the shadow/highlight clipping
views (share of differing pixels, as for Visualize Spots: both renderers draw them with the same
`visualize::apply`, and a 1-LSB difference at 0/255 flips a pixel).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:14:16 +02:00
Matthew James SivakandClaude Opus 5.5 f08522b8a9 LR-VIEW-ZOOM: the 20 ms rule clears a slow verdict only on full-size drags (docs)
Only a drag timed at full size (median of its full-size drafts, after the
first, at most 20 ms) forgets a slow-drag verdict; a drag that drafts small
from its start, or times fewer than two full-size drafts, leaves it unchanged,
as `DragScale::finish` does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 12:56:48 +02:00
Davit MatchakhelidzeandClaude Opus 5.5 2015f44c06 Release: keep the web build without craft-fonts for now (its WASM would pass Cloudflare's 25 MiB limit); docs say so
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-20 12:56:17 +04:00
Brandon ThomasandClaude Opus 5.5 a2a41383c4 Release 0.10.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.10.0
2026-10-19 22:19:04 -04:00
mahmatias 4c4f4ca215 Contributors: add mahmatias 2026-10-19 14:02:35 -03:00
mahmatias 54c6505191 test(slideshow): drop the template cache after the hand-written bad files
The folder's mtime may not move from the save's listing to the list that follows (same clock tick on a fast machine), so the stale cache hid the bad files and problems came back empty - deterministic on a warm build. The test drops the cache as its own wild.json case already did (and as templates_changed documents).
2026-10-19 14:02:35 -03:00
mahmatias e3d2654bd2 fix(tests): make Windows path spellings match folder-tree widget ids
The folder tree writes FolderNode.path with forward slashes on every platform, but tests_folder_drop built its widget ids from to_string_lossy, which gives backslashes on Windows: the 8 tests never found their rows there. row_path() normalizes the way tests_sync already does. Same class of fix in tests_export (path comparison) and an unused-import guard in catalog's staging tests (the module's only test is unix-only).
2026-10-19 14:02:29 -03:00
Davit MatchakhelidzeandClaude Opus 5.5 04e11e701a docs: Georgian draws with craft-fonts' Noto Sans Georgian; the web WASM keeps the Japanese, Thai and Georgian faces
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-19 18:13:10 +04:00
Davit Matchakhelidze 97ef4f7ecc Merge main 2026-10-19 18:13:03 +04:00
Claude 3a52cbe464 #2114: the headless test clicks Restore All and the single-place row
The test checked that Restore All was listed but clicked it only when the
machine already had a hidden location, so CI never exercised that path.
It now hides two places and restores them with Restore All, then hides
one and checks the row restores it directly, without a list.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-19 13:41:05 +00:00
Claude 4b8a5317fc #1508: a refused backup from the menu says why
The menu bar turned a command's error into a toast only for exports, so
File ▸ Back Up Library… did nothing visible when the host refused (changes
still unsaved, or nothing stored in this browser); the refusal reached only
the control channel (found in a real-browser check of PR #1987). Backup and
restore refusals are toasted too. Menu items are registered for automation
as `menuitem:<command id>`, and a headless test clicks File ▸ Back Up
Library… against a refusing host and reads the toast.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-19 12:39:25 +00:00
Claude e2ea657668 #2114: hidden Local locations come back one at a time
"Show N hidden locations" put every location removed from Local back at
once. With several hidden, the row now lists them (name, path on hover):
each comes back on its own, or all with Restore All. With one hidden, the
row restores it directly, as before. The command side already had
local.restoreHidden {path}; only the panel called it without a path.

The headless test hides a second place, opens the list from the row,
restores one, checks the other stays hidden, then restores the rest.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-19 11:29:48 +00:00
Claude d4627e9c26 #1507: dropping a Session no longer panics on the web
`face_download::Downloads::drop` gave a running download a second to stop,
with `Instant::now()` and `thread::sleep`, which panic on wasm32 ("time not
implemented on this platform"). The web host replaces its Session when the
library can't be opened, so with this branch an unreadable `catalog.log`
killed the page with the generic panic screen instead of showing the
library-problem window (found in a real-browser check of PR #1988). The wait
is skipped on wasm32, where there are no download threads; the cancel flags
are still set. Native test: an idle Downloads drops at once.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-19 09:01:22 +00:00
Claude 5f17b48c8d #2253: crop.aspect checks orientation before the current/toggle paths
A bad `orientation` was refused only on the refit path: "current" and an
unlocked "toggle" returned before the check, so {"aspect": "current",
"orientation": "bogus"} succeeded silently, and a value that isn't a string
fell back to the default. It is parsed first now, so every path refuses a
wrong word, a number, a boolean or null, and nothing changes (CodeRabbit on
PR #2280).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-19 08:49:40 +00:00
Matthew James SivakandClaude Opus 5.5 58c38ead2f LR-VIEW-ZOOM: describe the slow-drag verdict as per photo and control
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:13:51 +02:00
Matthew James SivakandClaude Opus 5.5 0360f940e3 Merge main into lightroom-jxl-dng
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 08:33:20 +02:00
NetterSilverandClaude Haiku 5.5 a3d00301cf Write ISOSpeed extension tag for ISO above 65534 in write_exif
Found while testing crates/meta/src/exif.rs:455 (write_exif)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 05:16:03 +00:00
chordpli de98d3a1ba LR-LIB-STACK: the badge double-click test checks the second click lands on the badge (#2233) 2026-10-19 09:28:31 +09:00
chordpli 266e668376 LR-LIB-STACK: a double-click on a stack badge toggles the stack once (#2233)
A click on a grid stack badge expands or collapses the stack. A double-click,
as in Lightroom, toggled it twice: the second click undid the first and the
stack stayed as it was. The badge now ignores the second click of a
double-click.
2026-10-19 09:05:04 +09:00
FrancoisandClaude d999e382ba #1949: pt-BR for Include selected photos and the mask overlay modes (#2033)
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-18 16:59:33 -06:00
Claude 81f02a6947 #2253: crop ratios keep the orientation asked for
set_aspect always turned the ratio to the image's orientation, so a Custom
ratio taller than wide came out landscape on a landscape photo, and a
ratio picked after X (crop.rotateAspect) turned the crop back. A named
ratio now takes the crop's present orientation (landscape, or portrait
after X; a square crop follows the image), a custom [w, h] is used as
given, and crop.aspect takes orientation: "crop" | "given" to choose.
The window reapplies the remembered ratio to an untouched photo with
orientation "crop", as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-18 22:48:56 +00:00
MarekSpodBiedry 15e9a24891 Draw the Before label on a dark pill so it reads on light photos (#2247) 2026-10-18 23:36:52 +02:00
witkowski01 f140629bfd i18n(pl): translate the mask effect import and removed keyword messages 2026-10-18 22:53:56 +02:00
Claude 55b7b47925 #2242: reverseGeocode maxDistance, and the 15 000-people limit is documented
GeoNames cities15000 holds towns of 15 000 people or more, so a photo in a
smaller town got the nearest larger one in City (Portofino → Rapallo,
5.3 km), another municipality. metadata.reverseGeocode takes maxDistance
(metres): past it, City and Sublocation stay empty, State and Country
still fill, and the reply names the town as nearestCity. Hostile values
are refused. The command help, the Fill Location tooltip and the parity
row say what the list holds. Default unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-18 20:13:25 +00:00
witkowski01 6bb4517d77 i18n(pl): Apple Photos Imports describes adding to Photos, not importing from it 2026-10-18 22:06:21 +02:00
Matthew James SivakandClaude Opus 5.5 1ed76d851d Merge main into alt-clipping-preview
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:39:24 +02:00
Matthew James SivakandClaude Opus 5.5 349c27917b Merge main into fix/330-drag-scale-followups
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:38:09 +02:00
Claude 00f55ef352 #2266: a presets.json that can't be written counts as unsaved
Preset commands change the preset list outside pending_log, and a failed
presets.json write was only logged: unsaved() stayed None, so nothing
warned and the web backup (#1987) would zip a stale presets.json; on
desktop a full disk lost the preset silently. The failure is now kept
(presets_error), counted by unsaved() (plus one change), retried by
persist_if_dirty with the same back-off as failed appends, and cleared
once the write succeeds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbegtYaPuwqZ81pGfELsFK
2026-10-18 19:28:49 +00:00
Dylan M. Taylor fb7ac08b9a ci: configure Dependabot for Cargo and GitHub Actions
Co-authored-by: Dylan M. Taylor <dylan@dylanmtaylor.com>
2026-10-18 12:31:40 -06:00
Carlos VillanuevaandClaude Opus 5.5 16417e2eca Lightroom import: document the functions this change touches
CodeRabbit's docstring check counted the touched functions without doc
comments (read_with_progress, apply_prepared, inspect_report, result_dialog
and a test helper). Comments only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RhZLBHaSnSko1eMByPibfh
2026-10-18 18:04:34 +00:00