You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Build system: a failed first build forces full rebuilds, and clean breaks a running watch #9241
Two ways the build system loses or misreads its state in lib/. Both reproduce with rescript 13.0.0-alpha.8 (found while reviewing #9238).
1. After a failed first build, every build cleans everything
# src/A.res: let x: int = "s" src/B.res: let y = 1
rescript build # Cleaned 0/0 … exit 1
rescript build # Cleaned previous build due to compiler update / Cleaned 0/1 / Compiled 2 modules, exit 1
rescript build # same again
Every build after the first failed one wipes lib/bs and lib/ocaml and recompiles all modules (B as well), with a misleading "compiler update" message, until a build succeeds.
compiler_info.ml:133-136 (needs_clean) treats an existing lib/ocaml/.compiler.log without compiler-info.json as a stale build, but compiler-info.json is only written after a successful build (build.ml:452-457).
2. rescript clean while rescript watch runs breaks the watcher
# src/A.res: let x = 1 src/B.res: let y = A.x
rescript watch &
rescript clean # Cleaning x, exit 0# edit src/A.res
Every later rebuild fails with Sys_error("<root>/lib/ocaml/A.ast: No such file or directory"), and the watcher never recovers.
clean.ml:83 only takes the build lock, which the watcher holds only while it builds. clean should refuse while lib/watch.lock is held (or the watcher should rebuild from scratch when its outputs disappear). The raw Sys_error is printed by build.ml:556-558.
Activity