MLD305: Asset path exists only under a case-only mismatch on a case-sensitive target¶
qual reports MLD305 when a relative literal path passed to
SVGMobject() / ImageMobject() matches no file exactly, but one of
Manim's extension-augmented search candidates matches an existing
file case-insensitively — for render profiles whose target platform is
case-sensitive (platform = "linux").
- Default severity:
warning - Minimum confidence:
high - Implementation phase:
4 - Fix: none (the correction cannot map 1:1 back onto the literal)
The scan follows exactly Manim's search order: working directory, then
assets_dir, then assets_dir with the known extensions appended
(.svg for SVGMobject; .jpg .jpeg .png .gif .ico for
ImageMobject). A case-insensitive development filesystem (macOS,
Windows) masks the mismatch locally — the render then fails only on the
case-sensitive target platform, typically CI.
The two case scans split by specificity so one span carries one finding
(DESIGN 7.3 prose): a literal-level mismatch — where the literal itself
rewrites 1:1 to the on-disk case — is MLR104's finding, which carries
the SAFE case correction. This rule covers the extension-augmented
candidates that scan cannot map back onto the literal. Windows-style
literals, ~ paths, absolute paths, non-literals, and case-insensitive
target platforms stay silent. A case-only mismatch whose affected
profiles all target case-insensitive platforms (windows/macos) is silent
under both rules: the declared renders resolve the file as written, so
there is no failure to report.
Wrong (target platform linux, on-disk file assets/icon.svg):
SVGMobject("ICON") # assets/ICON.svg only matches case-insensitively
ImageMobject("Picture") # assets/picture.png exists, Picture.png does not
Right: