Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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** | 59 arquivos `.js`, 41.159 linhas · Three.js `r160` vendorizado | ES modules servidos crus, **zero build**, sem dependência de runtime |
| `public/` | o **jogo** | 59 arquivos `.js`, 41.318 linhas · Three.js `r160` vendorizado | ES modules servidos crus, **zero build**, sem dependência de runtime |
| `src/` | o **site** | 18 páginas `.astro`, 21 rotas `/api` · Astro `^7.1.1` | framework é bem-vindo; `service_role` só no servidor |
| `tools/` | o **arnês** | 300 scripts em `tools/eval/`, 77 em `tools/` | node puro: sobe o jogo real sem browser |
| `tools/` | o **arnês** | 301 scripts em `tools/eval/`, 77 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:release eval:telemetry eval:identity eval:error-console eval:error-origin eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:botbrain eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:ambience-registry eval:parquewheel eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin 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 changelog:check eval:velhooeste eval:penitenciaria eval:charhard eval:charpbr eval:motoca-visual eval:camera-grip eval:pilot-system eval:pilot-grip eval:char-thumbnail eval:asset-integrity eval:gltf-validator eval:props-acervo eval:propsuv1 eval:character-voice eval:audio-pack-character-voice eval:cinematic-ui eval:grafite-editorial eval:map-source eval:map-new eval:campo-contract eval:lajes-rooftop eval:lajes-visual eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:mansao-water eval:mansao-garden eval:corrego-contract eval:corrego-water eval:look eval:mansao-ocean eval:wind eval:softparticles eval:escala-favela eval:escadao-contract eval:slice-abilities eval:faction-registry eval:mapview eval:devport spec:check skills:check eval:pickuparma eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:comentario eval:fixture eval:preload eval:docsautoria eval:replaycam
npm run check:fast # node tools/eval/runner.mjs syntax eval:release eval:telemetry eval:identity eval:error-console eval:error-origin eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:botbrain eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:ambience-registry eval:parquewheel eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin 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 changelog:check eval:velhooeste eval:penitenciaria eval:charhard eval:charpbr eval:motoca-visual eval:camera-grip eval:pilot-system eval:pilot-grip eval:char-thumbnail eval:asset-integrity eval:gltf-validator eval:props-acervo eval:propsuv1 eval:character-voice eval:audio-pack-character-voice eval:cinematic-ui eval:grafite-editorial eval:map-source eval:map-new eval:campo-contract eval:lajes-rooftop eval:lajes-visual eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:mansao-water eval:mansao-garden eval:corrego-contract eval:corrego-water eval:look eval:mansao-ocean eval:wind eval:softparticles eval:escala-favela eval:escala-favela-glb eval:escadao-contract eval:slice-abilities eval:faction-registry eval:mapview eval:devport spec:check skills:check eval:pickuparma eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:comentario eval:fixture eval:preload eval:docsautoria eval:replaycam
```

`package.json` tem **186 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 **188 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
35 changes: 35 additions & 0 deletions KNOWN-BUGS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4015,3 +4015,38 @@ quality na mesma amostra, a próxima leitura do painel separa máquina fraca de
fixo. O CHR5B contava ARQUIVO, o jogador via CONSTANTE. Corrigido junto.
- **C10** — `_freeSpot` (`game.js`) ignora colisores com `minY ≥ 1,5`; no mezanino não empurra
arma para fora de parede. Não mordeu ainda; é armadilha para o próximo mapa com andar de cima.

- **~~BUG-66 · "os mapas de favela so o lajes tem cordao de roupas do model, os outros nao e
tudo generico low poly" + "tem que ver a escala dos predios sempre"~~ (dono, 26/08) ·
RESOLVIDO 27/08 no córrego.** Duas coisas, uma causa: nenhuma régua olhava para prop de
CASA. A `eval:escala-favela` (BUG-55) mede os barracos procedurais — malha de vão,
colisor de puxadinho, corpo de palafita — e não vê GLB nenhum, porque em node o
GLTFLoader trava no caminho de textura (`EXT_texture_webp` → `ImageBitmap`/DOM). Prop de
casa entrava por um `targetH` escrito à mão e `targetH` errado não reprovava nada.
- **A armadilha da escala uniforme.** O molde do Mint chega normalizado num cubo de ~1 m
(medido no accessor POSITION do binário: `casa_favela_azul` 0,955 × 0,998 × 0,764 m;
`casa_favela_tijolo` 0,943 × 0,936 × 0,998). Casa de favela tem fachada de 4,0-5,6 m
com pé-direito de 2,6-3,2 m por pavimento — 1,4:1 a 1,7:1. Com `placeProp` (escala
uniforme) **não existe número que feche as duas faixas**: 4,4 m de fachada obrigam
4,6 m de pé-direito, que é a casa de gigante que o dono nomeou. Por isso as casas
entram por `placePropCaixa` (`mapprops.js`), que escala larg/alt/prof por eixo.
- **A régua morta que veio antes.** A tentativa de 26/08 declarou `fachada: 4.6` num
manifesto e conferiu o manifesto contra ele mesmo — número que não vem de geometria
nenhuma. Régua que lê a própria declaração não mede, ecoa. A que ficou
(`eval:escala-favela-glb`) lê os bounds do binário, planta template via
`registerPropTemplate`, sobe o mapa com `bootGame` e mede a **transform resultante** de
cada casa no referencial do próprio objeto (o giro é desfeito antes da `Box3`, senão a
AABB de uma casa girada 8° devolve fachada que não existe).
- **Onde o casario coube sem mexer em rota.** O GLB entra no lugar da MALHA, nunca do
COLISOR: as 6 palafitas sobre o canal empurram exatamente o colisor que a caixa
empurrava, e o morro do fundo (16 casas, |z| ≥ 48 contra `bounds` em 39,5) não empurra
nenhum. **Nenhuma casa de molde entrou nas fileiras A, B e C**: com fachada mínima de
4 m e a faixa do muro medindo 1,5 m de profundidade, casa de verdade ali obrigaria a
mover colisor e refazer rota, CTF e spawn — foi trade declarado, não esquecimento.
- **Custo declarado:** o corpo da palafita era 2,40-2,80 m e passou a 2,60-2,80 —
interseção da faixa da ESC4 com a faixa nova, para as duas réguas concordarem no número.
Colisor sobe no máximo 0,40 m e continua começando em 2,20 m (acima da cabeça).
Régua: `npm run eval:escala-favela-glb`; mutantes `ana` (escala 0,6 → ESCGLB2+ESCGLB3),
`molde-unico` (→ ESCGLB1), `laje-unica` (→ ESCGLB2+ESCGLB4), `varal-baixo` (→ ESCGLB5);
mutante desconhecido sai com código 2. **Escadão e campomorro continuam devendo** o
cordão de roupas do modelo — são outras frentes, em outros worktrees.
8 changes: 4 additions & 4 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 | 41.159 linhas em 59 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| Código do jogo | 41.318 linhas em 59 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| `game.js` | **7.260** linhas | `wc -l public/js/game.js` |
| `main.js` | 2.812 linhas | `wc -l public/js/main.js` |
| Armas com GLB | 27 | `git ls-files 'public/models/weapons/*.glb' \| wc -l` |
| GLBs de personagem | 63 | `git ls-files 'public/models/characters/*.glb' \| wc -l` |
| Props em GLB | 151 | `git ls-files 'public/models/props/*.glb' \| wc -l` |
| Props em GLB | 154 | `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 | 62, em 10 facções | array `CHARACTERS` de `characters.js` |
| Mapas no registro | 17 | objeto `MAPS` de `maps.js` |
| Arnêses visuais em HTML | 16 | `git ls-files 'public/*.html' \| wc -l` |
| Scripts do arnês | 300 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts do arnês | 301 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts de pipeline | 77 | `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.184` | `public/js/version.js` e `package.json` (batem) |
Expand Down Expand Up @@ -314,7 +314,7 @@ Os mapas registrados, e em que modo cada um abre:
| `escadao` | Escadão (Morro) | **captura** | `map_escadao.js` | 813 |
| `campomorro` | Campo do Morro | **captura** | `map_campomorro.js` | 713 |
| `lajes` | Lajes (Comunidade) | **captura** | `map_lajes_authored.js` | 1.263 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.258 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.394 |
| `mansao` | Mansão do Joá | **captura** | `map_mansao.js` | 955 |
| `posto_treta` | Posto da Treta | **captura** | `map_posto.js` | 506 |
| `upa_24h` | UPA 24h da Treta | **captura** | `map_upa.js` | 302 |
Expand Down
4 changes: 2 additions & 2 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

- **Versão:** `2.0.0-alpha.184`
- **Conteúdo jogável:** 10 facções, 62 personagens, 17 mapas e 27 armas com GLB
- **Código do jogo:** 41.159 linhas em 59 módulos JavaScript
- **Automação:** 186 comandos npm, 300 scripts de avaliação e 77 scripts de pipeline
- **Código do jogo:** 41.318 linhas em 59 módulos JavaScript
- **Automação:** 188 comandos npm, 301 scripts de avaliação e 77 scripts de pipeline

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

Expand Down
2 changes: 1 addition & 1 deletion docs/docs/arquitetura.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Tamanho dos arquivos que o `gen-arch.mjs` indexa — bloco gerado, regenerado po
| `public/js/weapons.js` | 356 |
| `public/js/springs.js` | 260 |

Total de `public/js/`: **41.159 linhas em 59 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/`: **41.318 linhas em 59 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
2 changes: 1 addition & 1 deletion docs/docs/colaborar.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ O registro, gerado do `MAPS` de `public/js/maps.js`:
| `escadao` | Escadão (Morro) | **captura** | `map_escadao.js` | 813 |
| `campomorro` | Campo do Morro | **captura** | `map_campomorro.js` | 713 |
| `lajes` | Lajes (Comunidade) | **captura** | `map_lajes_authored.js` | 1.263 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.258 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.394 |
| `mansao` | Mansão do Joá | **captura** | `map_mansao.js` | 955 |
| `posto_treta` | Posto da Treta | **captura** | `map_posto.js` | 506 |
| `upa_24h` | UPA 24h da Treta | **captura** | `map_upa.js` | 302 |
Expand Down
12 changes: 6 additions & 6 deletions docs/docs/comecando.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,17 @@ esta página envelhecia no primeiro commit — ver

| O que | Quanto | Onde confere |
|---|---:|---|
| Código do jogo | 41.159 linhas em 59 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| Código do jogo | 41.318 linhas em 59 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| `game.js` | **7.260** linhas | `wc -l public/js/game.js` |
| `main.js` | 2.812 linhas | `wc -l public/js/main.js` |
| Armas com GLB | 27 | `git ls-files 'public/models/weapons/*.glb' \| wc -l` |
| GLBs de personagem | 63 | `git ls-files 'public/models/characters/*.glb' \| wc -l` |
| Props em GLB | 151 | `git ls-files 'public/models/props/*.glb' \| wc -l` |
| Props em GLB | 154 | `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 | 62, em 10 facções | array `CHARACTERS` de `characters.js` |
| Mapas no registro | 17 | objeto `MAPS` de `maps.js` |
| Arnêses visuais em HTML | 16 | `git ls-files 'public/*.html' \| wc -l` |
| Scripts do arnês | 300 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts do arnês | 301 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts de pipeline | 77 | `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.184` | `public/js/version.js` e `package.json` (batem) |
Expand Down Expand Up @@ -229,7 +229,7 @@ Os mapas registrados hoje, e em que modo cada um abre:
| `escadao` | Escadão (Morro) | **captura** | `map_escadao.js` | 813 |
| `campomorro` | Campo do Morro | **captura** | `map_campomorro.js` | 713 |
| `lajes` | Lajes (Comunidade) | **captura** | `map_lajes_authored.js` | 1.263 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.258 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.394 |
| `mansao` | Mansão do Joá | **captura** | `map_mansao.js` | 955 |
| `posto_treta` | Posto da Treta | **captura** | `map_posto.js` | 506 |
| `upa_24h` | UPA 24h da Treta | **captura** | `map_upa.js` | 302 |
Expand Down Expand Up @@ -280,10 +280,10 @@ E os dois quality gates, com a lista exata do que cada um roda — direto do `pa
{/* BEGIN:GERADO:scripts — não edite à mão, rode `npm run docs` */}

```bash
npm run check:fast # node tools/eval/runner.mjs syntax eval:release eval:telemetry eval:identity eval:error-console eval:error-origin eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:botbrain eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:ambience-registry eval:parquewheel eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin 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 changelog:check eval:velhooeste eval:penitenciaria eval:charhard eval:charpbr eval:motoca-visual eval:camera-grip eval:pilot-system eval:pilot-grip eval:char-thumbnail eval:asset-integrity eval:gltf-validator eval:props-acervo eval:propsuv1 eval:character-voice eval:audio-pack-character-voice eval:cinematic-ui eval:grafite-editorial eval:map-source eval:map-new eval:campo-contract eval:lajes-rooftop eval:lajes-visual eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:mansao-water eval:mansao-garden eval:corrego-contract eval:corrego-water eval:look eval:mansao-ocean eval:wind eval:softparticles eval:escala-favela eval:escadao-contract eval:slice-abilities eval:faction-registry eval:mapview eval:devport spec:check skills:check eval:pickuparma eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:comentario eval:fixture eval:preload eval:docsautoria eval:replaycam
npm run check:fast # node tools/eval/runner.mjs syntax eval:release eval:telemetry eval:identity eval:error-console eval:error-origin eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:botbrain eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:ambience-registry eval:parquewheel eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin 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 changelog:check eval:velhooeste eval:penitenciaria eval:charhard eval:charpbr eval:motoca-visual eval:camera-grip eval:pilot-system eval:pilot-grip eval:char-thumbnail eval:asset-integrity eval:gltf-validator eval:props-acervo eval:propsuv1 eval:character-voice eval:audio-pack-character-voice eval:cinematic-ui eval:grafite-editorial eval:map-source eval:map-new eval:campo-contract eval:lajes-rooftop eval:lajes-visual eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:mansao-water eval:mansao-garden eval:corrego-contract eval:corrego-water eval:look eval:mansao-ocean eval:wind eval:softparticles eval:escala-favela eval:escala-favela-glb eval:escadao-contract eval:slice-abilities eval:faction-registry eval:mapview eval:devport spec:check skills:check eval:pickuparma eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:comentario eval:fixture eval:preload eval:docsautoria eval:replaycam
```

`package.json` tem **186 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 **188 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
2 changes: 1 addition & 1 deletion docs/docs/quality-gates.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ PR (`.github/workflows/ci.yml`).
{/* BEGIN:GERADO:invariantes — não edite à mão, rode `npm run docs` */}

- `tools/eval/invariants.mjs`: **2.281 linhas**, **65 identificadores de invariante declarados** (`put()`), dos quais **28** têm caminho de `skip()` declarado.
- O arnês inteiro são **300 scripts** em `tools/eval/` (`.mjs` + `.py`), mais **77 scripts** de pipeline em `tools/`.
- O arnês inteiro são **301 scripts** em `tools/eval/` (`.mjs` + `.py`), mais **77 scripts** de pipeline em `tools/`.
- Quantas invariantes rodam como **críticas** numa execução **não é derivável do fonte**: depende de qual insumo existe na máquina (o JSON do auditor de viewmodel, um GLB, uma pasta de anims). Esse número só sai rodando o quality gate — e o lugar dele é o cabeçalho do `KNOWN-BUGS.md`, atualizado com saída real.

Reproduza:
Expand Down
Loading
Loading