Este catálogo existe pra que ninguém precise abrir cada .mjs pra descobrir qual mede o quê —
e pra que os geracionais aposentados parem de ser reabertos por engano.
Regra deste diretório: o que roda no CI e os arquivos
.md/.jsonversionados são contrato. O resto é ferramenta de rodada — útil, mas descartável.
Todos rodam em Node puro, sem Chrome, e terminam em segundos. Todos saem com código 1 em falha crítica.
| Arquivo | O que mede | Artefato |
|---|---|---|
invariants.mjs |
O portão principal. As invariantes permanentes: toda vez que o dono reporta um bug, ele vira uma invariante aqui e nunca mais volta. Regenera vm_kick_sim.json sozinho e LÊ vm_mint_audit.json. |
npm run eval:invariants |
vm-mint-audit.mjs |
Enquadramento do viewmodel arma por arma, nos 26 GLBs reais. Mede a seção transversal perto de cada ponta em Z pra descobrir se a arma está de ré. | vm_mint_audit.json (versionado — sem ele as invariantes VM1–VM6/VM9/VM10 viram PULADAS, que é portão verde por ausência de dado) |
vm-kick-sim.mjs |
Coice do viewmodel: near plane + pitch em rajada. Prova que a coronha não atravessa a lente no pico. | vm_kick_sim.json |
botsim.mjs |
Navegação dos bots: 60 s × 5 mapas com sementes fixas. Roda a classe Game de verdade com os mapas de verdade. |
npm run eval:bots |
release-check.mjs |
Release usa o nome CSBR e as notas nativas do GitHub, que preservam PRs e contribuidores. | npm run eval:release |
error-provenance-check.mjs |
Preserva erro externo no console/banco sem atribuí-lo ao jogo ou abrir issue automática. | npm run eval:error-origin |
shader-budget-check.mjs |
Deriva do GLB real o orçamento de varyings da urna e protege fog/triplanar no piso WebGL1. | npm run eval:shaderbudget |
map-rotation-check.mjs |
Sugestão inicial de mapa: link manda, escolha do carrossel fica, e quem não escolhe roda pelos 5 mapas. | npm run eval:maprotate |
../gen-arch.mjs |
(fora deste diretório) Gera e valida o ARCH.md. --check reprova se estiver desatualizado. |
npm run arch |
| Arquivo | O que é |
|---|---|
ARCH.md |
GERADO. Índice do game.js por linha + tabela de conflito (quem pode editar qual região). O bloco entre BEGIN:GERADO e END:GERADO não se edita à mão — rode npm run arch. O texto fora dos marcadores é conhecimento humano e é preservado. |
BAR-CONSISTENCIA.md |
A régua vigente. 25 critérios de consistência e flow. Tem precedência sobre a BAR.md. |
BAR.md |
A régua de fidelidade visual (CS2/Valorant, o que é alcançável em Three.js r160, como os lugares brasileiros realmente são). |
RUBRIC.md |
Rubrica de avaliação usada pelos críticos do gauntlet. |
BASELINE-v2.json |
Baseline numérico da v2, pra comparação A/B. |
| Arquivo | O que mede |
|---|---|
map-check.mjs |
Geometria do mapa: colisores, spawns, alcançabilidade. |
probe-grafite.mjs |
Sonda descartável da passada viva de grafite: abre mapview?grafite=vivo e despeja âncoras (com __grafiteDebug), contadores de recusa e superfícies por mapa. Diagnóstico, não é régua. |
mode-check.mjs |
Rounds × CTF: o modo abre e termina em todos os mapas. |
ctf-verify.mjs |
Bandeiras alcançáveis a partir dos dois spawns. |
fv-verify.mjs |
Específico do Ferro Velho (A*/waypoints/LOS com o cânion BECO OESTE). |
pickup-check.mjs |
Itens coletáveis: posição e alcance. |
ui-check.mjs |
Elementos de HUD presentes e legíveis. |
mat-check.mjs |
Materiais: nada preto chapado, nada estourado. npm run eval:mat |
bot-routes.mjs, botdiag.mjs |
Diagnóstico de rota e de estado dos bots (complementam o botsim). |
stance-speed.mjs |
Velocidade por postura (andar/correr/agachar). |
loadout-test.mjs |
Loadout por personagem/facção. |
abateshud-check.mjs |
O contador de abates do JOGADOR existe no HUD, é legível por medida (piso de 24px fora de @media), imprime player.kills — não o placar do time — e sobrevive à virada de rodada. npm run eval:abateshud |
botfaca-check.mjs |
Rodada de faca: o bot fecha até o alcance da arma (a banda de fuzil recuava abaixo de 6 m com faca de 2,4 m), ataca por caminho de corpo a corpo — sem traçante, fogacho nem som de cano — e a rodada normal continua com bot que abre distância. npm run eval:botfaca |
replaycam-check.mjs |
Headshot do jogador não pode tirar a câmera da primeira pessoa, escalar o relógio (hit-stop) nem esconder arma/mira — e segue contando abate. Mede o contrário do que media até 06/09/2026. npm run eval:replaycam |
| Arquivo | O que faz |
|---|---|
vmrig-test.mjs |
Rig do viewmodel a 240 Hz, em node puro. |
vm-frame-check.mjs |
Enquadramento por frame. |
vm-orto.mjs |
Área de tela ocupada pela arma (a métrica de "arma gigante"). |
vm-project.mjs, vm-solve.mjs |
Projeção e solução do enquadramento. |
vm-verify.mjs |
Verificação final do viewmodel. |
tp-mount-probe.mjs |
Mount de 3ª pessoa, com parser de GLB próprio. |
fparms-capture.mjs |
Captura dos braços de 1ª pessoa. |
mount-capture.mjs |
Captura do ponto de mount. |
weapon-capture.mjs |
Captura arma a arma. |
char-probe.mjs, char_probe.py, char_sim.py |
Sondas de personagem (proporção, escala, palma). |
mixamo-capture.mjs, mixamo-measure.mjs |
Clipes do pack Mixamo. |
| Arquivo | O que faz |
|---|---|
ref-measure.py |
Mede as fotos de referência de references/viewmodel/ (é de onde saiu o teto de área de tela da VM18b). |
ref-body.py, ref-overlay.py |
Proporção corporal e sobreposição com a referência. |
r3_color.py, r3_depth.py, r3_fog.py, r3_texsim.py, r3_vm.py, r3_sim.py |
Rodada R3: cor, profundidade, névoa, textura. |
tone_calib.py, tone_r3.py, tone_sat.py |
Calibração de tonemap e saturação. |
vao_a1.py, vao_predict.py |
Oclusão de ambiente. |
mat_shade.py |
Sombreamento de material. |
havan-planta.py + .png |
Planta baixa da Loja H. |
p0-pix.py |
Comparação pixel a pixel da rodada P0. |
vm_quake_measure.py |
Medição do look Quake 4 (o antecessor do look CS 1.6 atual). |
| Arquivo | O que faz |
|---|---|
serve.mjs |
Servidor estático pro harness. npm run eval:serve |
harness.mjs |
Base compartilhada dos capturadores com Chrome. |
measure.mjs |
Utilitários de medição. |
shot.mjs, vmshot.mjs |
Screenshot simples. |
gl-metrics.mjs, gl-shots.mjs |
Métricas de GPU e capturas. |
blind-capture.mjs |
Captura cega das 26 armas (o "0 erros" que fecha rodada). |
game-capture.mjs, map-capture.mjs, select-capture.mjs, bv-capture.mjs, vm-capture.mjs, walk-video.mjs |
Capturadores por cena. |
fx-test.mjs |
Efeitos (bloom, partículas). |
Não abra estes para entender o sistema. Cada um foi escrito para UMA rodada
específica de gauntlet, resolveu o que tinha que resolver e ficou. O
conhecimento deles já está ou nos portões da §1, ou nos comentários de causa
raiz dentro do weapons.js/game.js, ou no CHANGELOG.md. Ficam versionados
porque reproduzem medições históricas — não porque alguém deva rodá-los.
Aposentados (movidos para tools/eval/aposentados/, fora do grep de
quem busca no arnês ativo): as 5 gerações de audio-probe*.mjs (sondas da
rodada 4 — grafo WebAudio, eco, duck, pan/PropDelay). O que cada uma media
sobreviveu nos comentários de causa raiz do audio.js (master chain com
limiter anti-clip, duckBus sidechain, caps de bounce em ~80ms) e nos portões
audio:check/assert:assets — nenhuma delas é mais execução de portão.
Aposentada — Rodada G2-R6 (pose e troca de arma) (movida para
tools/eval/aposentados/ em 2026-08-11, issue #43):
g2r6-blackband.mjs · g2r6-bots.mjs · g2r6-bots2.mjs · g2r6-capture.mjs ·
g2r6-pose-tune.mjs · g2r6-switch-capture.mjs · g2r6-switch2.mjs. O que
mediram sobreviveu: a pose e o framing da arma nos comentários de causa raiz do
weapons.js/game.js; o critério de troca (holster→draw, nunca duas armas no
quadro) no BAR-CONSISTENCIA.md §C14; e g2r6-bots2 foi o predecessor do
botsim.mjs, que o substituiu (ver o cabeçalho do botsim.mjs).
Aposentada — Rodada G2-R7 / R7b / R8 (framing e boca do cano) (movida para
tools/eval/aposentados/ em 2026-08-11, issue #43):
g2r7-aksweep.mjs · g2r7-capture.mjs · g2r7-mzprobe.mjs · g2r7-orbit.mjs ·
g2r7-smoke.mjs · g2r7b-capture.mjs · g2r7b-mzmarks.mjs · g2r7b-smoke.mjs ·
g2r7b-sweep.mjs · g2r8-sweep.mjs. Superadas pelo vm-mint-audit.mjs, que mede
em vez de varrer — é lá que o framing e a boca do cano viraram portão.
Ficam onde estão (não são obsoletos: vmattach.js os cita como proveniência
das offsets do viewmodel): g2r7-mzmarks.mjs (vmattach.js:18) e
../g2r7-measure.mjs em tools/ (vmattach.js:15/20/27).
Aposentada — Rodada G2-R14 (OOM e ADS) (movida para
tools/eval/aposentados/ em 2026-08-11, issue #43):
g2r14-ads.mjs · g2r14-capture.mjs · g2r14-memprobe.mjs. O memprobe foi o
que achou o OOM de 322 MB no boot; o problema morreu com a migração pros GLBs da
Mint, e o registro do episódio ficou no CHANGELOG.md.
Rodada G2-UI:
g2ui-map-bot.mjs · g2ui-map-previews.mjs · g2ui-map-tp.mjs ·
g2ui-map-walk.mjs · g2ui-probe.mjs · g2ui-verify.mjs ·
g2-capture.mjs · g2-tune.mjs · ../g2-gunspace.mjs · ../g2-maskprobe.mjs
Aposentada — Menus P1 (3 gerações) + P0 (movida para
tools/eval/aposentados/ em 2026-08-11, issue #43):
p1-menu.mjs · p1-menu2.mjs · p1-menu3.mjs · p1-game.mjs · p0-armas.mjs.
Capturas das telas de menu e da tela de armas de gerações antigas; a UI atual e
o que essas rodadas decidiram vivem no site/main.js e no CHANGELOG.md.
Aposentada — Rodadas R7x (feel) (movida para tools/eval/aposentados/ em
2026-08-11, issue #43):
r7-feel-capture.mjs · r75-capture.mjs · r76-capture.mjs · r77-capture.mjs.
Eram capturas de tuning de game feel; o que decidiram sobreviveu nos comentários
de causa raiz do game.js/springs.js e no CHANGELOG.md.
Look Quake 4 (o projeto escolheu o look CS 1.6 na v3.2.0):
vm-quake-capture.mjs · vm-quake-scen.mjs · vm_quake_measure.py
Diagnósticos R2: r2_audit.py · r2_diag.py
Antes de apagar qualquer um, confira:
grep -rn "<nome-do-arquivo>" tools/ .github/ package.jsoninvariants.mjs importa tp-mount-probe.mjs, e vários capturadores importam
harness.mjs — obsoleto que é dependência de portão não é obsoleto.
__pycache__/ estava versionado (12 .pyc) e agora está no .gitignore.
Se ele reaparecer no git status, é porque alguém removeu a regra.