Skip to content
CAI
Software that uses CAICheck a score

storytold/lightcraft

69.7

Adequate · 7 November 2026

293.1k

lines of production code

Rust

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Behavioural changes

1 commit (0 fixes) modifying (repo-wide)

A change to existing behaviour in (repo-wide) — 1 commit, 15 files: “M0.1/M0.2: workspace, xtask (layers/wasm/ci/stats), geom, color, raster”. Also in this area: 5 commits (0 fixes) modifying crates/catalog; 35 commits (1 fix) modifying crates/pipeline.

clean-room, crates/color · low confidence · unverified

1 commit (0 fixes) modifying apps/lightcraft-web, crates/ui-egui/examples

A change to existing behaviour in apps/lightcraft-web, crates/ui-egui/examples — 1 commit, 4 files: “Preserve queued file drops across dialogs and restore Flatpak sources (\#2975)” (refs \#2975). Also in this area: 19 commits (1 fix) modifying crates/ui-egui; 36 commits (0 fixes) modifying crates/ui-egui.

crates/ui-egui/examples · low confidence · unverified

1 commit (0 fixes) modifying crates/denoise, crates/denoise-core, crates/merge

A change to existing behaviour in crates/denoise, crates/denoise-core, crates/merge — 1 commit, 7 files: “security/meta,merge,raw,tiff,denoise: bound memory sized by attacker-shaped inputs”. Also in this area: 1 commit adding/updating tests in (repo-wide).

crates/merge/tests · medium confidence · unverified

1 commit (0 fixes) modifying crates/denoise-core, crates/preview

A change to existing behaviour in crates/denoise-core, crates/preview — 1 commit, 2 files: “security: staging and probe files are created new, never written through an existing entry (\#3673)” (refs \#3673). Also in this area: 26 commits (1 fix) modifying crates/engine; 2 commits (0 fixes) modifying crates/denoise.

crates/denoise-core · medium confidence · unverified

1 commit (0 fixes) modifying crates/engine/examples, crates/engine/src/sync

A change to existing behaviour in crates/engine/examples, crates/engine/src/sync — 1 commit, 2 files: “PERF-SYNC: a Synchronize Folder scan reads off the folder's listing whether a photo and its sidecar are there”. Also in this area: 19 commits (2 fixes) modifying crates/engine/src.

crates/engine/src/sync · medium confidence · unverified

1 commit (0 fixes) modifying crates/segment

A change to existing behaviour in crates/segment — 1 commit, 2 files: “LR-MASK-OBJECTS: a SAM 3 checkpoint in Meta's original format is named as such, not as an unsupported dtype (\#3378)” (refs \#3378). Also in this area: 3 commits (1 fix) modifying crates/segment; 66 commits (10 fixes) modifying crates/engine.

(repo-wide) · low confidence · unverified

12 commits (2 fixes) modifying crates/raw

A change to existing behaviour in crates/raw — 12 commits (2 fixs), 10 files: “LR-IMP-CAMERA-COVERAGE: PEF trims masked lines a little above black, saturated lines outside masked ones, and keeps a lens-cap frame whole (\#1271)”; “ORF: black level from the main maker note for bodies without ImageProcessing; gate and bound the 0x1017/0x1018 gains (part of \#1273)”; “LR-IMP-CAMERA-COVERAGE: Nikon D90 NEFs drop their filler columns (no pink band)”; and 9 more (refs \#1271, \#1273, \#1276, \#1272, \#1275). Also in this area: 1 commit (0 fixes) modifying crates/raw; 4 commits (1 fix) modifying crates/raw; 1 commit (1 fix) fixing crates/raw.

(repo-wide) · low confidence · unverified

132 commits (12 fixes) modifying crates/engine/src

A change to existing behaviour in crates/engine/src — 132 commits (12 fixs), 41 files: “Engine: folder.label command; labels follow folder rename and move”; “LR-LIB-FOLDER: delete populated album folders with undo (\#501)”; “LR-CLOUD-SMARTPREVIEW: smart previews record the camera-look fit version and are rebuilt when it is older”; and 129 more (refs \#501, \#510, \#146, \#496, \#244, …). Also in this area: 26 commits (1 fix) modifying crates/engine; 1 commit (0 fixes) modifying crates/engine/examples, crates/engine/src/sync.

crates/engine/examples · medium confidence · unverified

2 commits (0 fixes) modifying assets/app-icon

A change to existing behaviour in assets/app-icon — 2 commits, 17 files: “app icon: lynx (owner's ArtCraft drawing), Dock/taskbar/launcher wiring, palette docs”; “docs: tidy agent, contributor and asset docs”.

assets/app-icon · medium confidence · unverified

2 commits (0 fixes) modifying crates/engine/src/crs\_masks

A change to existing behaviour in crates/engine/src/crs\_masks — 2 commits, 1 file: “refactor(lightcraft-engine): move crs\_masks.rs tests to crates/engine/src/crs\_masks/tests.rs”; “style: cargo fmt the moved test modules”.

_crates/engine/src/crs\masks · medium confidence · unverified

2 commits (0 fixes) modifying crates/engine/src/lightroom\_sqlite

A change to existing behaviour in crates/engine/src/lightroom\_sqlite — 2 commits, 1 file: “refactor(lightcraft-engine): move lightroom\_sqlite.rs tests to crates/engine/src/lightroom\_sqlite/tests.rs”; “style: cargo fmt the moved test modules”.

_crates/engine/src/lightroom\sqlite · medium confidence · unverified

2 commits (0 fixes) modifying crates/engine/src/slide\_overlay

A change to existing behaviour in crates/engine/src/slide\_overlay — 2 commits, 1 file: “refactor(lightcraft-engine): move slide\_overlay.rs tests to crates/engine/src/slide\_overlay/tests.rs”; “style: cargo fmt the moved test modules”.

_crates/engine/src/slide\overlay · medium confidence · unverified

2 commits (0 fixes) modifying crates/meta/src/focus

A change to existing behaviour in crates/meta/src/focus — 2 commits, 1 file: “refactor(lightcraft-meta): move focus.rs tests to crates/meta/src/focus/tests.rs”; “style: cargo fmt the moved test modules”.

crates/meta/src/focus · medium confidence · unverified

238 commits (8 fixes) modifying (repo-wide)

A change to existing behaviour in (repo-wide) — 238 commits (8 fixs), 17 files: “docs: README feature status (persistence, MCP libraries, export metadata/watermark)”; “LR-EDIT-OPTICS-PROFILE: apply the distortion correction Panasonic/Leica record in RW2/RWL (\#256)”; “never-crash: deny the panic lints in every crate root; GPU asserts become fail paths (\#2137) (\#2170)”; and 235 more (refs \#256, \#2137, \#2170, \#3503, \#260, …).

(repo-wide) · low confidence · unverified

3 commits (0 fixes) modifying crates/raw

A change to existing behaviour in crates/raw — 3 commits, 18 files: “CI: clean under clippy 1.99 (as\_chunks for constant chunk sizes, ? in export resize parsing)”; “Never crash: raw and tiff decoders free of panicking calls”; “M3.7: header probe agrees with decode on subsampled lossless JPEG; lossless ARW corpus samples”. Also in this area: 1 commit (0 fixes) modifying crates/merge, crates/tiff; 1 commit (1 fix) fixing crates/tiff; 4 commits (1 fix) modifying crates/tiff.

crates/tiff/src · low confidence · unverified

4 commits (0 fixes) modifying crates/codecs

A change to existing behaviour in crates/codecs — 4 commits, 13 files: “LR-IMP-FORMATS: GIF density from the first frame; mostly blank canvases capped at 4 MP”; “LR-IMP-FORMATS: a GIF with no readable first frame is refused”; “LR-IMP-FORMATS: an RLE BMP that ends early opens; a GIF's bound counts only its LZW data (\#2553)”; and 1 more (refs \#2553, \#2710). Also in this area: 1 commit (0 fixes) modifying crates/faces, crates/testkit.

crates/testkit · low confidence · unverified

4 commits (1 fix) modifying crates/engine/src/sidecar

A change to existing behaviour in crates/engine/src/sidecar — 4 commits (1 fix), 3 files: “LR-BEHAV-UNDO: keep file history consistent after failed renames”; “Windows: keep sidecar spellings on case-insensitive volumes; fix rename/sidecar tests”; “LR-BEHAV-UNDO: each rename-provenance fixture gets its own folder (\#874's tests shared one and failed when run in parallel)”; and 1 more (refs \#874, \#989). Also in this area: 1 commit (1 fix) fixing crates/engine/src/crs, crates/engine/src/sidecar; 22 commits (2 fixes) modifying crates/engine/src; 1 commit (0 fixes) modifying crates/engine/src/import, crates/engine/src/sidecar.

(repo-wide) · medium confidence · unverified

63 commits (3 fixes) modifying crates/engine

A change to existing behaviour in crates/engine — 63 commits (3 fixs), 66 files: “LR-EDIT-OPTICS-PROFILE: apply DNG WarpRectilinear2 lens corrections (Pixel DNGs, \#635)”; “LRC-SS-OVERLAYS: slideshow overlays: identity plate, rating stars, text with tokens, watermark”; “Issue \#345: folder scan in the activity stack”; and 58 more (refs \#635, \#345, \#719, \#706, \#523, …). Also in this area: 1 commit (0 fixes) modifying crates/develop, crates/geom; 3 commits (1 fix) modifying crates/geom; 1 commit (1 fix) fixing crates/geom.

(repo-wide) · low confidence · unverified

9 commits (2 fixes) modifying crates/pipeline

A change to existing behaviour in crates/pipeline — 9 commits (2 fixs), 12 files: “LR-EDIT-OPTICS-PROFILE: apply the distortion correction Panasonic/Leica record in RW2/RWL (\#256)”; “\#323: windows on the GPU; Auto Mask strokes grow the window; dab references at f32”; “\#323: windows: noise reduction and mask edge refinement follow the whole frame's size”; and 6 more (refs \#256, \#323, \#157, \#316). Also in this area: 1 commit (0 fixes) modifying crates/develop, tools; 26 commits (1 fix) modifying crates/engine; 2 commits (2 fixes) fixing crates/develop; 1 commit (1 fix) fixing crates/develop, tools.

crates/develop · low confidence · unverified

Fixes

1 commit (1 fix) fixing crates/engine/src/crs, crates/engine/src/sidecar

A fix in crates/engine/src/crs, crates/engine/src/sidecar — 1 commit (1 fix), 4 files: “test(engine): factor complex regression scenarios”. Also in this area: 42 commits (1 fix) modifying crates/engine.

crates/engine/src/crs · medium confidence · unverified

7 commits (4 fixes) fixing packaging

A fix in packaging — 7 commits (4 fixs), 13 files: “fix(installer): harden install-policy checks and packaging-lint workflow”; “test(installer): cover the compiled folder searches, resolver chains and wizard folder replay”; “Preserve queued file drops across dialogs and restore Flatpak sources (\#2975)”; and 4 more (refs \#2975). Also in this area: 3 commits (0 fixes) modifying packaging; 1 commit (0 fixes) modifying packaging; 4 commits (1 fix) modifying packaging.

packaging/windows · medium confidence · unverified

Test coverage

1 commit adding/updating tests in (repo-wide); 1 commit adding/updating tests in crates/mcp; 1 commit adding/updating tests in crates/ui-egui/src/panels/grid; 1 commit adding/updating tests in crates/ui-egui/tests; 6 commits adding/updating tests in crates/ui-egui/tests.

Written by cca.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 70.

Lenses

  • Code Health 86
  • Architecture 96
  • Maturity 70
  • Readiness 73
  • Security 62
  • Performance 100

Changes since last survey

  • 300 commits — 261 feature/other, 39 fixes

By area

  • (repo) — 140 commits
  • crates/ui-egui — 40 commits
  • crates/engine — 35 commits
  • (root) — 13 commits
  • crates/pipeline — 10 commits
  • crates/catalog — 8 commits
  • .github/workflows — 7 commits
  • crates/raw — 7 commits
  • crates/gpu — 6 commits
  • crates/lensdb — 5 commits
  • apps/lightcraft — 4 commits
  • apps/lightcraft-web — 4 commits
  • crates/meta — 3 commits
  • apps/lightcraft-cli — 2 commits
  • crates/raster — 2 commits
  • crates/slideshow — 2 commits
  • docs/gpu-pipeline.md — 2 commits
  • packaging/linux — 2 commits
  • crates/film — 1 commit
  • crates/geocode — 1 commit

Notable commits

  • fix: Fix Histogram::percentile returning black when the target truncates to 0
  • fix: Fix mismatched source/destination rects in before/after zoom window renders (#3842)
  • fix: LR-EDIT-OPTICS-PROFILE: prefer known crop in fixed-lens score ties
  • fix: LR-EDIT-OPTICS-PROFILE: synchronize unknown-crop fix with main
  • fix: LR-MASK-GEOMETRY: review fixes: guides reach the photo from off-photo ends and break at folds
  • fix: LR-MASK-GEOMETRY: review fixes: kept masks stay put and turn with a synced orientation, off-photo clicks refused
  • fix: LR-MASK-GEOMETRY: review fixes: old masks keep their region and frame, clicks and handles in mask coordinates
  • fix: Merge PR #2421: fix(windows): add opt-in DirectComposition workaround for VRR flicker
  • fix: Merge origin/main into fix/2674-stored-frame-regions
  • fix: Merge origin/main into fix/2674-stored-frame-regions
  • fix: Merge pull request #2600 from insideTheFlux/fix/2571-export-subfolder
  • fix: Merge pull request #2659 from insideTheFlux/fix/2575-geocode-dataset-params
  • fix: Merge pull request #2772 from insideTheFlux/fix/2682-render-debug-log
  • fix: Merge pull request #2857 from insideTheFlux/fix/2674-stored-frame-regions
  • fix: Merge pull request #3496 from insideTheFlux/fix/3468-find-similar-freeze
  • fix: Merge pull request #3650 from insideTheFlux/fix/3381-title-bar
  • fix: Merge pull request #3660 from eliets2/fix/issue-2249-nikon-z-400mm-f-4-5-z-tc-1-4x-lensfun-co
  • fix: Merge pull request #3697 from storytold/fix/sec-lensdb-profile-copies
  • fix: Merge pull request #3715 from Yeetjof/fix/survey-remove-x
  • fix: Merge storytold/main into fix/2571-export-subfolder
  • …and 280 more

Written by cca.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

storytold/lightcraft was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 7 November 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 8a0b91a95c30618b690374dd2db9d0684ebc9b23 — the exact code this score is about.
  • Scored under rubric-2026.11.2 — the same rubric and the same method as every other entry in this index.
  • Measured by Canine Code Analyzer (cca.canine.dev) using cca measure-2026.11.3+preprod-5f8314471808.