Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
087f6fd
docs(maps): inventaria catálogo e organiza passes de polish
rubenmarcus Sep 6, 2026
f06668d
feat(maps): aplica primeiro passe de superfícies e entorno urbano
rubenmarcus Sep 7, 2026
e9dd573
docs(maps): atualiza contadores gerados do lote visual
rubenmarcus Sep 7, 2026
20d8a39
docs(maps): fecha evidências e continuidade do primeiro lote
rubenmarcus Sep 7, 2026
edaa5e4
docs(maps): corrige Campinho independente e recupera contexto dos PRs
rubenmarcus Sep 7, 2026
e4d32c8
feat(maps): recupera acervo dos PRs de Parque e Carandiru com origem
rubenmarcus Sep 7, 2026
52a24a2
fix(maps): recupera Campinho do Morro como mapa independente
rubenmarcus Sep 7, 2026
7fbd4a7
test(maps): restaura contratos e contexto do Campinho
rubenmarcus Sep 7, 2026
fe7d1a4
fix(maps): recupera Parque e eleva copas fora das rotas
rubenmarcus Sep 7, 2026
459ab10
fix(maps): recupera Penitenciária e corrige fachadas e refletores
rubenmarcus Sep 7, 2026
fc029a2
test(maps): valida fachadas e vida da Penitenciária
rubenmarcus Sep 7, 2026
052fdf2
fix(maps): integra candidatos recuperados ao catálogo
rubenmarcus Sep 7, 2026
883a7ef
chore(maps): substitui passe básico e prepara capturas dos candidatos
rubenmarcus Sep 7, 2026
94f5eae
docs(maps): prepara prompts GLM Claude Mint dos lotes prioritários
rubenmarcus Sep 7, 2026
d64b3e0
docs(maps): prepara prompts individuais do restante do catálogo
rubenmarcus Sep 7, 2026
506b82c
docs(maps): registra parada recuperável e validação dos candidatos
rubenmarcus Sep 7, 2026
6a3d21d
fix(maps): corrige contagem de draw calls do capturador e registra re…
rubenmarcus Sep 7, 2026
16eed5d
style(maps): encurta comentários novos ao teto do CM1
rubenmarcus Sep 7, 2026
0265aa7
chore(docs): atualiza gerados após encurtar os comentários
rubenmarcus Sep 7, 2026
920ee4c
merge(main): torna raiz #540 revisável
rubenmarcus Sep 8, 2026
c10989d
docs(mapas): registra checkpoint da raiz #540
rubenmarcus Sep 8, 2026
574b27e
docs(bugs): desambigua VM14 como BUG-145
rubenmarcus Sep 8, 2026
32ec3ce
docs(mapas): fecha próximo passo da raiz
rubenmarcus Sep 8, 2026
f4f5cea
docs(mapas): prepara publicação da raiz v2
rubenmarcus Sep 8, 2026
28a1d82
merge(main): atualiza PR #554 para alpha.240
rubenmarcus Sep 8, 2026
b8f16cb
docs(mapas): registra integração alpha.240
rubenmarcus Sep 8, 2026
5d6db38
feat(maps): UV em metros e vão fundo das janelas na Penitenciária
rubenmarcus Sep 7, 2026
2b035d8
docs(mapas): registra integração do degrau #541
rubenmarcus Sep 8, 2026
cd576a1
docs(mapas): fecha gates pré-push da #541
rubenmarcus Sep 8, 2026
e96aeee
Merge pull request #555 from corosolto/codex/mapas-stack-541-v2
rubenmarcus Sep 24, 2026
83da74f
merge(main): integra alpha.266 na raiz da pilha de mapas
rubenmarcus Sep 24, 2026
fe7ee17
merge(main): integra alpha.267 na raiz da pilha de mapas
rubenmarcus Sep 24, 2026
a7f69cd
chore(docs): regenera bloco derivado apos o merge da alpha.267
rubenmarcus Sep 24, 2026
2cccfc7
Merge da base (conflito só em arquivo gerado, resolvido pelo autofix)
csbrasil-BOT Sep 24, 2026
d532aa5
chore(docs): regenera bloco derivado (autofix)
csbrasil-BOT Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions ARCH.generated.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ Números atuais das zonas, do quality gate e do `package.json`:

| Zona | O que é | Tamanho medido | Regra |
|---|---|---|---|
| `public/` | o **jogo** | 96 arquivos `.js`, 48.698 linhas · Three.js `r160` vendorizado | ES modules servidos crus, **zero build**, sem dependência de runtime |
| `public/` | o **jogo** | 98 arquivos `.js`, 49.992 linhas · Three.js `r160` vendorizado | ES modules servidos crus, **zero build**, sem dependência de runtime |
| `src/` | o **site** | 20 páginas `.astro`, 4 rotas `/api` · Astro `^7.1.1` | framework é bem-vindo; `service_role` só no servidor |
| `tools/` | o **arnês** | 387 scripts em `tools/eval/`, 76 em `tools/` | node puro: sobe o jogo real sem browser |
| `tools/` | o **arnês** | 395 scripts em `tools/eval/`, 76 em `tools/` | node puro: sobe o jogo real sem browser |

**Não existe `public/index.html`.** O HTML do jogo é `src/pages/index.astro`, servido na rota `/`. Servir `public/` estaticamente entrega os arnêses visuais, **não o jogo** — é a pegadinha que custa a primeira hora de todo mundo.

Expand All @@ -25,10 +25,10 @@ Comandos e scripts atuais do quality gate:
<!-- BEGIN:GERADO:scripts — não edite à mão, rode `npm run docs` -->

```bash
npm run check:fast # node tools/eval/runner.mjs syntax eval:analytics eval:online eval:release eval:error-console eval:edgecache eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:passosim eval:perfcampo eval:dificuldade eval:qualmapas eval:pickuparma eval:parquewheel eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check eval:audioalcance eval:audioespacial eval:audioenvelope eval:audioproc eval:audiocapacidade eval:audiofablocal eval:audioeventos eval:audioannouncer eval:audiovoicemix eval:audioprivate eval:audioruntimeassets eval:menumusicreview audio:inventario:autoteste audio:shortlist:autoteste feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin eval:switchteam eval:launchwatchdog eval:launchrace eval:spawn eval:regen eval:pegada eval:dmgdir eval:ctflabels anims:check anims:merge:check walls:check media:check menuwalls:check travessao:check eval:medianet eval:posters eval:grafitelayout eval:simclock eval:backendhints eval:geoproxy changelog:check eval:velhooeste eval:penitenciaria eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:wflocal eval:comentario eval:fixture eval:preload eval:docsautoria eval:netcode eval:sonda eval:noescolha eval:maqfraca eval:qualadapt eval:netcodecbin eval:movimento eval:botsim-golden eval:replaycam eval:abateshud eval:botfaca eval:escadao-home eval:escadao-conflict-home eval:escadao-casa-central eval:escadao-casas-conflito eval:escadao-mirante-abrigo eval:escadao-structure eval:escadao-descent eval:escadao-details eval:corrego-contract eval:corrego-water eval:corrego-superficie eval:skylife ops:test ops:selftest eval:lajes-layout eval:lajes-rooftop eval:lajes-visual eval:lajes-ruas eval:lajes-identidade eval:lajes-roof-overlap eval:lajes-nav eval:lajes-ctf-surface eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:lajes-vertical eval:lajes-bots eval:lajes-ambiencia eval:lajes-santos eval:lajes-game eval:mappreview eval:lajes-airspace eval:lajes-soundscape eval:lajes-spawn-space eval:sertao eval:sertao-spatial eval:sertao-interiors eval:sertao-wagon eval:sertao-flora eval:sertao-occlusion eval:sertao-fauna eval:calango-quadruped eval:sertao-horizon eval:sertao-distant-birds eval:sertao-integration eval:sertao-livestock eval:sertao-sky-lifecycle eval:amazonia eval:chao eval:miticos-lobisomem eval:mansao
npm run check:fast # node tools/eval/runner.mjs syntax eval:analytics eval:online eval:release eval:error-console eval:edgecache eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:passosim eval:perfcampo eval:dificuldade eval:qualmapas eval:pickuparma eval:parquewheel eval:campo-contract eval:campomorro-molde eval:parquevida eval:parquecanopy eval:penitenciariavida eval:penitenciariafacade eval:penitenciariapickup eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check eval:audioalcance eval:audioespacial eval:audioenvelope eval:audioproc eval:audiocapacidade eval:audiofablocal eval:audioeventos eval:audioannouncer eval:audiovoicemix eval:audioprivate eval:audioruntimeassets eval:menumusicreview audio:inventario:autoteste audio:shortlist:autoteste feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin eval:switchteam eval:launchwatchdog eval:launchrace eval:spawn eval:regen eval:pegada eval:dmgdir eval:ctflabels anims:check anims:merge:check walls:check media:check menuwalls:check travessao:check eval:medianet eval:posters eval:grafitelayout eval:simclock eval:backendhints eval:geoproxy changelog:check eval:velhooeste eval:penitenciaria eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:wflocal eval:comentario eval:fixture eval:preload eval:docsautoria eval:netcode eval:sonda eval:noescolha eval:maqfraca eval:qualadapt eval:netcodecbin eval:movimento eval:botsim-golden eval:replaycam eval:abateshud eval:botfaca eval:escadao-home eval:escadao-conflict-home eval:escadao-casa-central eval:escadao-casas-conflito eval:escadao-mirante-abrigo eval:escadao-structure eval:escadao-descent eval:escadao-details eval:corrego-contract eval:corrego-water eval:corrego-superficie eval:skylife ops:test ops:selftest eval:lajes-layout eval:lajes-rooftop eval:lajes-visual eval:lajes-ruas eval:lajes-identidade eval:lajes-roof-overlap eval:lajes-nav eval:lajes-ctf-surface eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:lajes-vertical eval:lajes-bots eval:lajes-ambiencia eval:lajes-santos eval:lajes-game eval:mappreview eval:lajes-airspace eval:lajes-soundscape eval:lajes-spawn-space eval:sertao eval:sertao-spatial eval:sertao-interiors eval:sertao-wagon eval:sertao-flora eval:sertao-occlusion eval:sertao-fauna eval:calango-quadruped eval:sertao-horizon eval:sertao-distant-birds eval:sertao-integration eval:sertao-livestock eval:sertao-sky-lifecycle eval:amazonia eval:chao eval:miticos-lobisomem eval:mansao
```

`package.json` tem **244 scripts**; o motivo de cada um mora em `SCRIPTS.md` (migrado das chaves `//nome` em 18/08/2026) — é onde está o porquê.
`package.json` tem **251 scripts**; o motivo de cada um mora em `SCRIPTS.md` (migrado das chaves `//nome` em 18/08/2026) — é onde está o porquê.

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: `node -p "Object.keys(require('./package.json').scripts)"`

Expand Down
50 changes: 50 additions & 0 deletions KNOWN-BUGS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6358,3 +6358,53 @@ comandos: `docs/maps/LAJES-PERFORMANCE.md`; artefatos locais em
### Amazônia 8×8 — CPU e escadas, 06/09/2026, PR #527

Pedido: “medir e reduzir o lag de single-player 8x8, confirmar escadas das palafitas viradas para o respawn e visão do rio desbloqueada”. Perfil Node reproduziu o custo em consultas de visão sobre madeira/chão agrupados; BFS não é a causa dominante. Correção e provas em [AMAZONIA-8X8-PERF-ESCADAS.md](docs/reports/AMAZONIA-8X8-PERF-ESCADAS.md). Continuação local em validação, sem navegador/merge/release; frametime de GPU ainda não medido.

## Campinho do Morro — erro JS intermitente na entrada da partida (07/09/2026)

Observado **1 vez em 4 execuções** do capturador nesta lane, sempre em `campomorro`,
sem erro nos outros mapas da mesma rodada:

```
Cannot read properties of undefined (reading 'id')
```

Evidência: `artifacts/mapas-polish/recovery-fixed/browser-med.json`, campo `errors` da
entrada `campomorro`, gravado por
`node tools/eval/mapas-polish-capture.mjs artifacts/mapas-polish/recovery-fixed campomorro`.
Duas reexecuções isoladas do mesmo comando deram `errors: 0`; portanto é corrida, não
falha determinística, e **não** foi atribuída a arquivo:linha ainda.

`Régua: nenhuma.` O capturador passou a registrar `e.stack` em vez de `e.message`
(`tools/eval/mapas-polish-capture.mjs`), de modo que a próxima ocorrência já sai com pilha.
Não corrigir às cegas: sem a pilha, qualquer palpite sobre torcida/CTF/bots é especulação.
O mapa chega a `live`, carrega os props e joga nas quatro vistas fixas.

### ~~BUG-146 · VM14: rack norte da Penitenciária encosta na guarita~~ · CORRIGIDO LOCALMENTE 08/09/2026

Relato recebido na integração do PR #540: “reproduza o gate VM14 do pickup
inalcançável da Penitenciária e determine se é introduzido pela pilha ou herdado”.

**Régua vermelha:** `PATH=/opt/homebrew/bin:$PATH node tools/eval/pickup-check.mjs
penitenciaria` no merge local de `0265aa76` com `origin/main` mediu 1 de 66 pickups
sem alcance. A `carbine` do rack norte foi empurrada para `(11,18; 46,60)` e ficou
a 1,23 m da célula alcançável mais próxima; VM14 exige no máximo 1,0 m.

**Origem:** a mesma régua em `origin/main` mede 0/66 falhas; no HEAD `0265aa76` do
#540 mede 1/66. Portanto a falha é introduzida pela pilha. O colisor cheio da
`guarita_muro` norte cobre também o vão sob a cabine elevada; `_freeSpot` empurra a
arma para o canto entre guarita e muro. Evidências locais em
`artifacts/mapas-stack-root/vm14-{origin_main,codex_mapas-polish-integral}.{log,json}`.

**Correção:** as duas guaritas mantêm o mesmo modelo e posição, mas o colisor cheio
foi substituído pelos oito apoios de 0,30 m que correspondem à estrutura visível.
VM14 passou para 0/66 falhas; pior distância até chão alcançável caiu de 1,23 m para
0,14 m. Spawns, pickups declarados, CTF e limites não mudaram.

**Mutante:** `node tools/eval/pickup-check.mjs penitenciaria
--mutante=torre-bloco` restaura o AABB cheio da guarita direita. A régua volta a
1/66 sem alcance, com a `carbine` a 1,33 m, e sai 1. O mutante falha se não encontrar
os oito apoios ou se não reproduzir a arma específica.

**Custo declarado:** quatro AABBs estreitos por guarita em vez de um AABB grande;
o vão sob a cabine passa a ser navegável e os apoios continuam sólidos. Aparência,
draw calls e posição dos GLBs não mudam. Teste manual sob a guarita ainda pendente.
23 changes: 12 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,17 @@ contra bots, direto na aba. Sem download, sem instalação, sem cadastro.

| O que | Quanto | Onde confere |
|---|---:|---|
| Código do jogo | 48.698 linhas em 96 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| `game.js` | **7.483** linhas | `wc -l public/js/game.js` |
| `main.js` | 3.571 linhas | `wc -l public/js/main.js` |
| Código do jogo | 49.992 linhas em 98 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| `game.js` | **7.484** linhas | `wc -l public/js/game.js` |
| `main.js` | 3.572 linhas | `wc -l public/js/main.js` |
| Armas com GLB | 26 | `git ls-files 'public/models/weapons/*.glb' \| wc -l` |
| GLBs de personagem | 55 | `git ls-files 'public/models/characters/*.glb' \| wc -l` |
| Props em GLB | 173 | `git ls-files 'public/models/props/*.glb' \| wc -l` |
| Props em GLB | 183 | `git ls-files 'public/models/props/*.glb' \| wc -l` |
| Clipes de animação versionados | 681 | `git ls-files public/models/anims \| wc -l` |
| Personagens jogáveis | 53, em 6 facções | array `CHARACTERS` de `characters.js` |
| Mapas no registro | 17 | objeto `MAPS` de `maps.js` |
| Mapas no registro | 18 | objeto `MAPS` de `maps.js` |
| Arnêses visuais em HTML | 15 | `git ls-files 'public/*.html' \| wc -l` |
| Scripts do arnês | 387 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts do arnês | 395 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts de pipeline | 76 | `git ls-files 'tools/*.mjs' \| wc -l` |
| Tarefas de entrada escritas | 26 | `git ls-files 'docs/issues/[0-9]*.md' \| wc -l` |
| Versão | `2.0.0-alpha.268` | `public/js/version.js` e `package.json` (batem) |
Expand Down Expand Up @@ -89,7 +89,7 @@ arquitetura): `cd docs && npm install && npm start` → <http://localhost:3000/d
| Camada | Ferramenta | Versão |
|---|---|---|
| Motor 3D (WebGL) | **Three.js**, vendorizado | `r160` |
| Jogo | ES modules vanilla, **zero build** | 96 arquivos |
| Jogo | ES modules vanilla, **zero build** | 98 arquivos |
| Site | **Astro** com SSR | `^7.1.1` |
| Hospedagem | adapter **Vercel** | `^11.0.6` |
| Banco | **Postgres gerenciado** (RLS; schema privado, fora do repo) | `^2.110.7` |
Expand All @@ -100,7 +100,7 @@ arquitetura): `cd docs && npm install && npm start` → <http://localhost:3000/d
| Esta documentação | **Docusaurus** | `3.6.3` |
| Runtime de CI | **Node** | `22` |

Three.js sai de `public/vendor/three.module.js` (**sem CDN, sem npm no runtime**). Astro e Vercel de `package.json` + `astro.config.mjs` + `vercel.json`. Dos scripts de `tools/`, **149** importam Playwright, **58** importam gltf-transform e **10** importam meshoptimizer.
Three.js sai de `public/vendor/three.module.js` (**sem CDN, sem npm no runtime**). Astro e Vercel de `package.json` + `astro.config.mjs` + `vercel.json`. Dos scripts de `tools/`, **150** importam Playwright, **58** importam gltf-transform e **10** importam meshoptimizer.

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: `dependencies/devDependencies do package.json · REVISION de public/vendor/three.module.js`

Expand Down Expand Up @@ -279,7 +279,7 @@ projeto.
| Regra | Valor | Constante |
|---|---|---|
| Facções · personagens | 6 · 53 (B 9 · C 9 · E 8 · F 9 · M 9 · U 9) | `CHARACTERS` |
| Mapas no menu | 17 — 2 abrem em rodadas, **15 em captura** | `MAPS` / `ctfMode` |
| Mapas no menu | 18 — 2 abrem em rodadas, **16 em captura** | `MAPS` / `ctfMode` |
| Respawn | 2,2 s | `RESPAWN_DELAY` |
| Round | 99 s, 3 vitórias | `ROUND_TIME` / `ROUNDS_TO_WIN` |
| Captura | alvo = **todas as bandeiras do mapa**, 2 rodadas (rede de segurança 480 s) | `capsToWin = ctfPts.length` / `CTF_ROUNDS_TO_WIN` |
Expand All @@ -306,6 +306,7 @@ Os mapas registrados, e em que modo cada um abre:

| Id | Nome no menu | Abre em | Arquivo em `public/js/` | Linhas |
|---|---|---|---|---:|
| `campomorro` | Campinho do Morro | **captura** | `map_campomorro.js` | 815 |
| `mansao` | Mansão do Joá | **captura** | `map_mansao.js` | 1.395 |
| `amazonia` | Treta na Amazônia | **captura** | `map_amazonia.js` | 1.192 |
| `escadao` | Escadão (Morro) | **captura** | `map_escadao.js` | 1.407 |
Expand All @@ -320,11 +321,11 @@ Os mapas registrados, e em que modo cada um abre:
| `upa_24h` | UPA 24h da Treta | **captura** | `map_upa.js` | 289 |
| `obras_prefeitura` | Obras da Prefeitura | **captura** | `map_obras.js` | 241 |
| `atacadao_treta` | Atacadão da Treta | **captura** | `map_atacadao.js` | 256 |
| `parque_treta` | Parque da Treta | **captura** | `map_parque.js` | 403 |
| `parque_treta` | Parque da Treta | **captura** | `map_parque.js` | 818 |
| `velho_oeste` | Sertão da Treta | **captura** | `map_velho_oeste.js` | 1.061 |
| `penitenciaria` | Penitenciária da Treta | **captura** | `map_penitenciaria.js` | 1.008 |

**17 mapas registrados** — 2 abrem em rodadas e 15 em captura. `ctfMode` **abre** o mapa em captura, não prende: o jogador troca no menu (é a `MOD1`). Há 23 arquivos `map_*.js` em `public/js/` — arquivo no disco **não** implica mapa jogável.
**18 mapas registrados** — 2 abrem em rodadas e 16 em captura. `ctfMode` **abre** o mapa em captura, não prende: o jogador troca no menu (é a `MOD1`). Há 24 arquivos `map_*.js` em `public/js/` — arquivo no disco **não** implica mapa jogável.

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: `objeto MAPS de public/js/maps.js`

Expand Down
14 changes: 13 additions & 1 deletion SCRIPTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,17 @@ A roda-gigante gira em torno do cubo; assentos não invadem lateral, base nem ar
npm run eval:parquewheel
```

## `eval:penitenciariapickup`

Executa o flood-fill real do VM14 somente na Penitenciária. Existe para impedir
que o rack norte volte a ser empurrado para o canto fechado entre a guarita elevada
e o muro (BUG-146). Mutante: `node tools/eval/pickup-check.mjs penitenciaria
--mutante=torre-bloco` restaura o colisor cheio da cabine e precisa ficar vermelho.

```bash
npm run eval:penitenciariapickup
```

## `eval:velhooeste`

O mapa Velho Oeste preserva marcos, janelas de madeira abertas/fechadas, gênero, perigo e recompensas dos cartazes, retratos, densidade, colisões, spawns e rota. Mutantes: sem-saloon|sem-carrocas|sem-tumbleweed|sem-obstaculos-centrais|centro-aberto|sem-cartazes|sem-retratos|cartaz-sobre-janela|genero-unico|janela-verde|todas-fechadas|perigoso-unico|recompensa-repetida|sem-colisao-varanda|sem-colisao-movel|parada|texturas-genericas.
Expand Down Expand Up @@ -643,11 +654,12 @@ npm run eval:audiocapacidade

## `eval:audiofablocal`

Prova o instalador do laboratório Fab sem ler áudio comprado: a fixture usa arquivos de texto e exige symlink para a raiz privada exata, manifest sem caminho absoluto, somente os 5 eventos que o runtime alcança hoje e tiro da AK fixado em um candidato para não cair eternamente em cache frio. Também planta gore dentro de `ak.shot`; `--mutante=sem-veto` desliga o filtro do instalador e precisa acender LAB4.
Prova o instalador do laboratório Fab sem ler áudio comprado: a fixture usa arquivos de texto e exige symlink para a raiz privada exata, manifest sem caminho absoluto, somente os 5 eventos que o runtime alcança hoje e tiro da AK fixado em um candidato para não cair eternamente em cache frio. Também planta gore dentro de `ak.shot`; `--mutante=sem-veto` desliga o filtro do instalador e precisa acender LAB4. O Campinho do Morro reutiliza a cama de favela já presente no pack; `--mutante=sem-campomorro` remove essa extensão e precisa acender LAB8g.

```bash
npm run eval:audiofablocal
node tools/eval/audio-fab-local-check.mjs --mutante=sem-veto
node tools/eval/audio-fab-local-check.mjs --mutante=sem-campomorro
```

## `audio:shortlist`
Expand Down
6 changes: 3 additions & 3 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<!-- BEGIN:GERADO:status_atual — não edite à mão, rode `npm run docs` -->

- **Versão:** `2.0.0-alpha.268`
- **Conteúdo jogável:** 6 facções, 53 personagens, 17 mapas e 26 armas com GLB
- **Código do jogo:** 48.698 linhas em 96 módulos JavaScript
- **Automação:** 244 comandos npm, 387 scripts de avaliação e 76 scripts de pipeline
- **Conteúdo jogável:** 6 facções, 53 personagens, 18 mapas e 26 armas com GLB
- **Código do jogo:** 49.992 linhas em 98 módulos JavaScript
- **Automação:** 251 comandos npm, 395 scripts de avaliação e 76 scripts de pipeline

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: `package.json · CHARACTERS · MAPS · public/models/weapons · public/js · tools/`

Expand Down
6 changes: 3 additions & 3 deletions docs/docs/arquitetura.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@ Tamanho dos arquivos que o `gen-arch.mjs` indexa — bloco gerado, regenerado po

| Arquivo | Linhas |
|---|---:|
| `public/js/game.js` | 7.483 |
| `public/js/main.js` | 3.571 |
| `public/js/game.js` | 7.484 |
| `public/js/main.js` | 3.572 |
| `public/js/characters.js` | 1.099 |
| `public/js/glbchars.js` | 851 |
| `public/js/vmattach.js` | 628 |
| `public/js/weapons.js` | 353 |
| `public/js/springs.js` | 260 |

Total de `public/js/`: **48.698 linhas em 96 arquivos**. O índice símbolo→linha, com a tabela de conflito, é outro bloco gerado: `tools/eval/ARCH.md` (`npm run arch`).
Total de `public/js/`: **49.992 linhas em 98 arquivos**. O índice símbolo→linha, com a tabela de conflito, é outro bloco gerado: `tools/eval/ARCH.md` (`npm run arch`).

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: ``git ls-files public/js/*.js | xargs wc -l``

Expand Down
Loading
Loading