Sanitary file I/O and cached-path resolution for the Optic engine.
All fallible functions return [OpticResult] wrapping [OpticErrorKind::File]
errors with descriptive messages.
Cache path convention
Assets are cached alongside the source file in an optc/ subdirectory:
assets/tex/foo.png → assets/tex/optc/foo.otxtr
models/cube.obj → models/optc/cube.omesh
shaders/main.glsl → shaders/optc/main.oshdr