- Run
GRADLE_USER_HOME=/tmp/lossless-cut-gradle ./scripts/dev-scripts/project-verify.sh; if Gradle reports a read-only cache/lock or unusable wildcard IP, rerun with approved escalation. - Run
GRADLE_USER_HOME=/tmp/lossless-cut-gradle ./scripts/dev-scripts/gradle-test.sh <module> "*"; keep the quoted wildcard (:core:domainuses:test, Android modules use:testDebugUnitTest).
- Access user/shared media only through SAF or
ContentResolver;java.io.Fileis allowed only for app-private storage such as cache data. - Keep
:enginebehind Hilt and:core:domaininterfaces (:appusesruntimeOnly(:engine)); keep:core:domainpure JVM with no AndroidX or Hilt imports. - Keep Compose under
:app/ui/compose/**; do not use Compose for custom views or timeline rendering.
- Serialize
MediaExtractor/MediaMuxerwork on the dedicated single-threaded engine dispatcher; rethrowCancellationExceptionbefore generic catches and callensureActive()in loops. - Put native engine instrumented tests under
:engine/src/androidTest; catchUnsupportedOperationExceptionwhen finalizingIS_PENDING=0for SAF or FileProvider URIs.
- Verify actual files under
com/tazztone/losslesscutwithrgbefore editing; inspectgit statusbefore staging, and rerungit add/git commitwith approved escalation if.git/index.lockis read-only.