Clause
← Toda a documentação

O original em inglês mudou desde esta tradução, pelo que partes dela podem estar desatualizadas. Ler em inglês

Traduzido do original em inglês · 1e3a39c8-dirty · 2026-10-26

Validação

Base atual

Os gates registados mais recentes no anfitrião de desenvolvimento Windows x64 (clang-cl e SDK do LLVM 23.1.2, /MT, _ITERATOR_DEBUG_LEVEL=0); os passos posteriores registam os seus em .agents/00-finished.md:

VerificaçãoResultado
CTest Debug combinado a partir do zero (2026-10-14)299/300 aprovados; a falha é o limite conhecido de tamanho da IR em codegen_measurements; codegen_resource_cli está desativado
check-quality-all (mesma execução)Limpo; Lizard CCN 10
Testes opcionais de auditoria ao OTP (2026-10-14, pin d199a49a01a2, oráculo OTP 29.1.1)17/17
regenerate.py --corpus all --check (idem)19/19 corpora reproduzidos

Executar o gate

A partir de uma shell de programador do Visual Studio x64 com C:\Program Files\LLVM\bin no PATH (a seleção automática do SDK reutiliza thirdparty/):

cmake --preset debug --fresh -DBUILD_TESTING=ON -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
cmake --build build/debug
ctest --preset debug-fast                  # during development
ctest --preset debug -j 16                 # full mode, at feature completion
cmake --build build/debug --target check-quality      # changed files, one unit per header
cmake --build build/debug --target check-quality-all  # whole tree

Linux

O mesmo gate corre em Linux com o SDK Linux do LLVM 23.1.2 fixado como compilador do anfitrião (CC/CXX a partir do seu bin/), a libstdc++ do sistema, Ninja e CMake 3.28 ou mais recente. O Boost 1.90 e o toml++ 3.4.0 vêm de pacotes instalados ou são extraídos para thirdparty/ (boost_1_90_0/, tomlplusplus-3.4.0/); só o Windows os descarrega. O ld.lld do arquivo da release liga a ICU 70 (Ubuntu 22.04) e o seu lldb liga o Python 3.14; em anfitriões sem eles, linking_lto precisa da ICU 70 em LD_LIBRARY_PATH, e linking_debugger usa o GDB.

cmake --preset debug --fresh -G Ninja -DBUILD_TESTING=ON
cmake --build build/debug
ctest --preset debug -j 16

check-quality (Lizard, clang-tidy) corre apenas no anfitrião de desenvolvimento Windows; os outros anfitriões compilam e executam os testes (esteve limpo em Linux uma vez, ver o histórico).

Outros alvos

Os alvos de 32 bits e ARM são verificados sem um compilador compilado para eles (não existe SDK do LLVM para esses anfitriões):

Fixtures e proveniência

Conceção dos testes

O comportamento é testado através da CLI real, dos objetos emitidos, de consumidores nativos ligados e dos goldens do OTP. Os testes unitários dedicados permanecem apenas onde o código-fonte não consegue alcançar o estado, cada um com o seu propósito indicado no teste:

Os casos de capacidades do sistema de ficheiros (ligações, aliases por maiúsculas/minúsculas) relatam testes saltados por caso; nunca substituem a aprovação de um teste completo.

Estado por plataforma e sanitizers

Benchmarks

Comparação manual de desempenho com o Erlang/OTP. Nunca faz parte do CTest, do gate de commit nem de check-quality, e só ela precisa de um Erlang/OTP no anfitrião; os resultados são evidência específica do anfitrião, não resultados do gate.

make-benchmark.bat                         # Windows; set JOBS=N to cap parallel builds
make-benchmark.bat --repeat 9 --only bench_gc,bench_msg
make-benchmark.bat --cpus all                 # unpinned set; default --cpus performance
make benchmark BENCH_ARGS="--baseline HEAD~5"   # other hosts

Histórico

Condensado a partir dos antigos registos por passo (originais no histórico do Git até ao commit 2777c98). Salvo indicação em contrário: Windows x64, LLVM 23.1.2, pin 21776803ecd1, oráculo OTP 29.1.1 / ERTS 17.1. Os números de testes são execuções completas do CTest aprovadas, com zero testes saltados.

DataMarcoTestesUnidades de qualidadeNotas
2026-09-19Phase VI do analisador sintático (macOS arm64, OTP 29.1 751f87b7, oráculo 29.0.5)46todas344/344 produções testemunhadas; corpus de 10 ficheiros
2026-09-20Projetos (macOS arm64)64todasDebug, apenas compilador, ASan+UBSan
2026-09-28Migração dos testes para fluxos de trabalho da CLI; reparação do gate em Windows75todasStack overflow em parser_hardening corrigido com uma pilha de 8 MiB; Lizard + clang-tidy limpos
2026-09-29Steps 1–46 do marco do compilador103182Apenas compilador 80, apenas runtime 16, ASan do runtime 16
2026-10-01 – 10-03Plano de padrões/guards PG1–PG20104–131189–258Revisões 2–4 da ABI; PG15a tornou os goldens independentes do OTP (auditorias opcionais, 131 → 118 testes); encerrado com 19 corpora, 67 634 valores, 1 969 resultados semeados
2026-10-03Auditoria do código-fonte do OTP125258Ficheiros copiados do OTP substituídos por fragmentos locais; uma comparação por janelas de 60 tokens com 4 150 ficheiros Erlang e 1 190 ficheiros C/C++ do OTP não encontrou sobreposição além de um tuplo de inteiros gerado
2026-10-03Base do plan 11 step 1 (commit b1a471f, pin 21776803ecd1, Lizard 1.24.0, clang-tidy 22.1.8)125 (122 rápido)258Completo 729 s em série, 85 s com -j 16; 14/14 auditorias; 19/19 corpora; objetos O0/O2 para outros alvos inspecionados em 7 alvos
2026-10-03Steps 2, 4: fixtures de programas, impressão de termos126–128265Seis goldens de programas do OTP; 9 542 goldens de ~w/display
2026-10-04Steps 8, 8I: executor de executáveis, heap clássico (phases B, C fechadas)138–144272–276Completo -j 16 235–370 s
2026-10-04 – 10-05Steps 9–20: case, if, lançamentos, catch, try, stack traces, maybe (phase D fechada), recursão, frames e chamadas de cauda146–158277–278Testes rápidos e afetados em modo completo por passo; completo -j 16 155/155 em 259 s na phase D
2026-10-06Steps 21–28: comprehensions (phase E fechada), raízes e recolha, limites de memória e de termos (27A–27E), cópias de grafos159–166278–281Completo -j 12 105–275 s; o step 27 removeu os limites de memória predefinidos
2026-10-07Steps 29–35: records, native records (ABI 6), funs (ABI 7), closures, funs com nome, chamadas dinâmicas (ABI 8)167–177283–290Completo -j 12 119–152 s
2026-10-09Step 63 Linux x86-64 (WSL2 Ubuntu 25.04, glibc 2.41, clang do SDK LLVM 23.1.2, libstdc++ 14, GDB 16.2)235338CTest completo 235/235 em 161 s; Lizard e clang-tidy limpos em Linux (7 relatórios do analisador em cabeçalhos do Boost ignorados); gate Windows 235/235 com os cabeçalhos verificados
2026-10-09Step 64 32 bits: Windows x86 (WoW64, clang-cl) e Linux i386 (chroot Debian 13, clang 19)42 + 65 goldens—Testes do runtime/ABI 42/42 nativamente em ambos; goldens cross.py 65/65 em ambos (execuções integer_limit só de 64 bits saltadas)
2026-10-09Step 65 Linux arm64 e armhf (sysroots Debian 13, qemu-user 9.2)42 + 65 goldens—Testes do runtime/ABI 42/42 em cada; goldens 64/65 em cada (port_spawn enoent: lacuna do posix_spawn no qemu), limite de execução 900 s
2026-10-10Step 67 ASan + UBSan + LeakSanitizer (Linux x86-64)235—Nenhum relatório dos sanitizers; quatro testes de recusa injetada do anfitrião fora do âmbito do ASan; CLAUSE_TEST_TIMEOUT_SCALE=10
2026-10-10Step 68 ThreadSanitizer (Linux x86-64)233—Uma inversão da ordem de bloqueios corrigida (Executor::clear); depois nenhum relatório no CTest completo nem em 15 testes de concorrência x5
2026-10-10Steps 65A–65C: behaviours, module_info/0,1, imports234–236 rápido342–344Os goldens de lint e de executáveis reproduzem-se com o OTP 29.1.1
2026-10-11Steps 73A–73G parse transforms242/243 rápido—Falha conhecida de codegen_resource_cli, entretanto desativado
2026-10-12Steps 62D1–62E diretório de compilação e caches263/264todasCTest completo, falha conhecida de codegen_resource_cli; check-quality-all limpo
2026-10-13Steps 58U–58W cache de inferência278/279todasCTest completo, falha conhecida de codegen_measurements; check-quality-all limpo
2026-10-14Step 41S prim_eval e a nova execução do luerl (H3 fechado)299/300todasVer a base atual
2026-10-17Plan 20 OPTM.2 (Term de uma palavra, termos persistentes no local e recuperados) e OPTM.3 (acessores sem verificações)330/332todasCTest completo: falha conhecida de codegen_measurements, e library_freshness (OTP do anfitrião) ainda espera os corpos de stub not_implemented que b0e62a38 substituiu; check-quality-all limpo
2026-10-19Plan 21 LIB10F ThreadSanitizer (Linux x86-64): goldens de ETS e digraph, runtime_concurrency10—Nenhum relatório; ets_portions num só worker revelou uma eliminação libertada em duas porções, corrigida atribuindo a um objeto libertado o custo de um percorrido

PG = passo do plano de padrões/guards; os registos dos passos do plano 11 estão arquivados em .agents/00-finished.md.