Build system: a failed first build forces full rebuilds, and clean breaks a running watch

Aberta
#9,241 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@cknitt já está trabalhando nisso.

Desde 6/11/2026.

  • #9247 de @cknitt — aberto

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
52/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Domínio
build-system

Direção de pesquisa

Start with compiler_info.ml:133-136 and build.ml:452-457 to trace when compiler metadata is checked and written after a failed build. Then inspect clean.ml:83 and how lib/watch.lock is used by the watcher; build.ml:556-558 shows where the raw error is printed. Done means failed builds no longer trigger repeated full cleans and running watches recover or are protected from concurrent clean operations.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
OCaml
Estrelas
7.5k
Forks
485
Merge médio
16h 51min
PRs com merge (30d)
268

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de rescript-lang/rescript

Todas as issues de rescript-lang/rescript

Issues semelhantes

Mais issues de Build System

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.