crates/engine/src/media.rs: main moved render_now and export_job to media/session.rs; the two size checks ported there
crates/engine/src/tests_export.rs: the test is appended to tests/export.rs
crates/engine/src/export.rs: main moved the code to export/; the 16-bit ZIP size test ported to export/tests.rs
crates/ui-egui/src/panels/dialogs.rs: main moved the dialog to dialogs.rs and dialogs/export.rs; the LZW note helpers, preset hover hint and tests ported there
crates/ui-egui/src/panels/grid.rs: calls crate::dialogs::preset_lzw_note
The doc comment of export_dialog_params stays directly above that function (review fix)
crates/engine/src/export.rs: main moved the code to export/prepare.rs; hunk ported there by hand
docs/gaps.md, docs/parity-checklist.md: header keeps the newer line, revision rows are the union
A data line such as `nan 0 0` starts with a letter and was skipped as an
unknown keyword, so a file with enough other entries still parsed.
(CodeRabbit review on #2540.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without CRAFT_FONTS_DIR the Reference view's "▸" has no glyph and egui_kittest panicked, failing the audit on every dev build. It now allows boxes then and records a skip!(Fonts) note; with craft-fonts a missing glyph still fails.
The launch list's rows say "Checking…" until a worker answers; the
answer drops that line, the centred window shrinks and its buttons move.
draw_launch_list only waited for the list to be drawn, so on a loaded
runner the answer could land between a click's press and release and
ui.clickWidget refused it ("moved before its release"), as on a
windows-latest run of
a_queued_photo_drop_survives_the_choosers_new_library_prompt_and_cancel.
The helper now waits until every row is answered and the window holds
still, as the launch_library tests already do.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
UPDATE_APP (native builds; craft-update is a native-only dependency) carries our 128 px icon and accent (#f2a516, its colour in ArtCraft Launcher). The updater, the self-update
helper and craft-update's startup prompt all get them through crate::UPDATE_APP; the
prompt draws the icon, the accent and "by ArtCraft" (craft-update's default developer).
craft-update is pinned to storytold/craft-libs main at 1065653e7 (#434).
Clippy fixes for Rust 1.99 in untouched code (same logic):
- crates/engine/src/cmd/export.rs
- crates/ui-egui/src/dialogs/rules_editor/rules_move.rs
- crates/ui-egui/src/panels/detail.rs
Tests that take a folder offline rename it to '<dir>.offline'. temp_dir only cleared '<dir>', and smart_previews_folder_is_chosen_per_library never removed anything, so a non-empty '.offline' left by an earlier run whose process id was reused made the rename fail with DirectoryNotEmpty (1 failure in 300 runs under load).
The existing synthetic lossy RGB fixture tiles are re-declared grey by a
header edit (colour space RGB to Grey, dropping the 6-bit primaries field
a grey encoding does not carry, per the ColourEncoding bundle). Their XYB
frame data is unchanged, so they decode as one grey plane whose rendered
channels differ. The test checks decode against the gradient's BT.2100
luminance in the linear and sRGB curves.
Refs #275
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ti8KemZbjE2ZgHgV1q1BM
Lightroom Classic's HDR and panorama merges of monochrome raws store a
one-plane LinearRaw image as lossy (XYB) JPEG XL tiles whose codestream
declares a grey colour encoding (16-bit float with a linear curve, or
16-bit integer with the sRGB curve). Those were refused as "lossy JPEG XL
tile with a single colour plane", so the files opened preview-only.
A lossy grey tile is still coded as three XYB channels. It is now
restored like the RGB case: jxl-oxide renders linear sRGB (never the
declared encoding, which would clip), the single plane is the luminance
(CIE Y, D65) of that, then the declared transfer curve is applied.
One plane must be declared grey and three RGB; HDR curves, other white
points and intensity targets above 255 stay unsupported.
RENDER_CACHE_VERSION 70 -> 71: files that showed their embedded preview
before render from raw data now, under the same content key.
Refs #275
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ti8KemZbjE2ZgHgV1q1BM
Found while testing crates/fetch/src/lib.rs:465 (parse_content_range)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Found while testing crates/fetch/src/http.rs:140 (Url::parse)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The doc_path test declares `gvfs` on every platform, but only the
`#[cfg(not(windows))]` assertion below it uses it. A Windows build therefore
reports `unused variable: gvfs`, `cargo clippy --all-targets -- -D warnings`
fails there, and `cargo xtask ci` stops at its clippy step, so none of the
later steps run. The declaration now carries the same cfg as its only use.
Nothing changes on other platforms.