Skip to content

map2: lajes — praça do térreo e rota cima×baixo - #438

Draft
rubenmarcus wants to merge 7 commits into
feat/times-e-mapas-completofrom
map2/lajes
Draft

map2: lajes — praça do térreo e rota cima×baixo#438
rubenmarcus wants to merge 7 commits into
feat/times-e-mapas-completofrom
map2/lajes

Conversation

@rubenmarcus

@rubenmarcus rubenmarcus commented Aug 25, 2026

Copy link
Copy Markdown
Member

O defeito (palavras do dono)

"O lajes é o mais bonito visualmente mas está muito confuso. A ideia era os times irem tanto por baixo quanto por cima, e agora só vai por cima. Por baixo tinha que ter uma praça no meio, ver os becos e jogar cima contra baixo."

O portão do mapa estava 8/8 verde. Era o portão que estava cego.

A causa raiz: o térreo e o telhado eram dois grafos separados

map_lajes_authored.js ligava o pé de cada escada ao nó de térreo mais próximo com if (nodes[i].y < 1) — e o mais próximo era o primeiro degrau da própria escada (y = 0,17, a 0,28 m). A escada ligava em si mesma.

Medido no harness: 300 nós de térreo num componente, 307 de laje em outro. Como os 2 spawns e as 4 bandeiras estão todos em laje, as 20 rotas que a CTF2 enumerava corriam 100% em laje, 0% de térreo. O chão do mapa era cenário.

A CTF2 não podia pegar isso: ela conta quantas rotas separadas existem, nunca a que altura elas correm — régua que mede numa direção é cega na outra (lição 1).

Régua nova: eval:lajes-vertical (LV1–LV6)

Escrita antes do conserto e vermelha em 4 de 5 no estado inicial.

mede antes depois
LV1 atravessar por baixo custa o mesmo que flanquear por cima ✗ travessia não existia ✓ 1,03–1,48× o flanco, 48–63% no chão
LV2 ir por cima continua sendo opção
LV3 praça no térreo, no meio ✗ 16 m², centro a 13,4 m ✓ 146 m², centro a 0,8 m
LV4 cover na praça ✗ 0 peças ✓ 17 peças, espaç. 3,5 m
LV5 becos visíveis das lajes ✗ 20,4% ✓ 63,1%
LV6 toda aresta de térreo andável de ponta a ponta (não existia) ✓ 1286 arestas, 0 furando sólido

Mutantes, cada um mordendo só o seu check: so-por-cima→LV1 · praca-cheia→LV3/LV4/LV5 · laje-cega→LV5 · aresta-fantasma→LV6.

SEP_ROTA e QUAD_ESPAC saíram para módulos compartilhados (rotas-separadas.mjs, limiares-mapa.mjs) e agora são importados pela CTF2/MAP5 e pela LV1/LV4 — lição 2: número copiado entre réguas é o instrumento discordando de si.

O que entrou no mapa

  • Praça (x −7,2..7,2 · z −8,2..9): nenhuma casa, muro ou pilastra de beco nasce dentro. Quadra pintada, traves, bancos, floreiras com mangueira, mesa de bar, caixa d'água e pneus como cover.
  • DESCIDA NORTE (topo em NE) e DESCIDA SUL (topo em SW), cada uma a um plank do spawn, com ramal de beco próprio.
  • Malha de navegação no térreo (2,0 m, com diagonais). Aresta só nasce com o vão inteiro livre — testar só o ponto médio deixava a aresta pular muro de 0,26 m.
  • Alvenaria sob os lances: degrau não tem colisor, então o chão sob a escada ficava andável e cercado (7 células sem volta ao spawn).

Duas tentativas descartadas, com o número que as matou

  • Escada no meio da praça: encurtava o detour para 1,54×, mas o poço de 5,9 m derrubou a visada de 62,4% → 42,9% — matava o "ver os becos" que comprou a rodada.
  • Divisas fechando o fundo de quintal: quebram o corredor de contorno de 78 m, mas o lajes-antitrap saltou de 15 → 97 células sem volta ao spawn. A faixa ficou aberta; quem não entra nela é a malha de navegação.

Porquê completo e números em docs/maps/LAJES-PRACA.md.

Visual (critério 4: não regride)

tools/eval/asset-evidence/maps/lajes/praca-ab/ — antes × depois na mesma câmera (o antes foi re-tirado com o mapa de d954ca41 restaurado; câmera diferente não é comparação).

  • do chão: parede de tijolo na cara → praça aberta com quadra, traves, mangueira e céu;
  • da laje leste: parede cega → a praça inteira e quem está nela;
  • o skyline de lajes (varais, fios, pipas, caixas d'água) está intacto e ganhou a copa da mangueira como marco.

Portões

  • mapa: 11/11 (lajes-rooftop · visual · authored · spatial · gap · circuito · antitrap · vertical · map-new · mapcontrato · map-source)
  • check:deploy: 35/35
  • invariantes: 38/55 — as 4 vermelhas (MAP2B, MAT1, MAT2, TEX1) são de mansão/velho_oeste e foram medidas iguais com o mapa lajes original restaurado; não são desta frente.

Não verificado

  • Ninguém jogou o mapa: LV1 mede comprimento de rota no grafo, não diversão.
  • A LV5 roda em node, onde nenhum GLB carrega — mede visada contra os colisores (idênticos nos dois mundos pela tabela HOUSE_BOUNDS), não contra a malha.
  • A revisão adversarial de contexto limpo foi feita por mim mesmo (quem escreveu o diff), não por agente separado.

…ecos

Reprova o estado atual em 4 de 5: nos 8 pares spawn<->bandeira as 20 rotas
que a CTF2 acha correm 100% em laje (0% terreo), nao ha sala larga no miolo
(16 m2, centro a 13,4 m do meio), a praca nao tem cover e so 20,4% das
visadas das bordas de laje alcancam o terreo central.

SEP_ROTA sai para tools/eval/rotas-separadas.mjs e passa a ser importado pela
CTF2 do map-check e pela LV1/LV2: as duas classificam o MESMO conjunto de
rotas, e limiar duplicado e o instrumento discordando de si (licao 2).

Agent: Claude Code (Opus 5)
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
Agent: Claude Code (Opus 5)
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
@vercel

vercel Bot commented Aug 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
csbrasil Ready Ready Preview Aug 25, 2026 5:11am

Request Review

@csbrasil-BOT csbrasil-BOT added the target:main PR apontando para a branch main label Aug 25, 2026
@csbrasil-BOT

csbrasil-BOT commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

csbrasil-bot classification

Note

@rubenmarcus abriu 32 arquivo(s) · +1099 −77, base feat/times-e-mapas-completo.

O que mudou

área arquivos + amostra
🧪 arnês 13 +612 −32 antitrap-overlay.png, antes-praca-da-laje-leste.jpg, antes-praca-do-chao-sul.jpg
📚 docs 12 +111 −22 ARCH.generated.md, README.md, STATUS.md
📦 outros 6 +135 −1 package.json, bolsao.mjs, grafo-png.mjs
🗺️ mapas 1 +241 −22 map_lajes_authored.js

Labels

label por quê
needs-human-gameplay toca gameplay/render/HUD/mapa/personagem — decisão de humano
needs-staging mudança de runtime/UI — valida integrado no staging antes do merge
target:main vai direto pra main, sem fila de integração

@estraga-codigo

Copy link
Copy Markdown
Collaborator

Esbirro

Esbirro · plantão da produção · 🕵️

check vermelho parado neste PR

Caution

Não sei classificar este vermelho. Segue o que o CI cuspiu — palpite de bot sobre bug alheio só atrapalha.

o quê valor
head d954ca4110ae
checks vermelhos 2
classe outra
hora do plantão 2026-08-25T03:29:33.330Z

Vermelho:

build (https://github.com/corosolto/client/actions/runs/32803430580/job/97668759013)
smoke (https://github.com/corosolto/client/actions/runs/32803430551/job/97668759002)

Rabo do log:

2026-08-25T03:04:56.8699771Z ✓ PASSA   CENA3 a medição de custo de cena é recente (≤ 14 dias)
2026-08-25T03:04:56.8700354Z                 probe de 2026-08-11T22:51:15.580Z (13.2 dias), commit 797a478 | atualize com `npm run eval:cena`
2026-08-25T03:04:56.8701173Z ·· PULADO PX1   no ADS o jogador vê a arma E a mira
2026-08-25T03:04:56.8701626Z                 exige browser — sem arnês dedicado (divida PX)
2026-08-25T03:04:56.8702161Z ·· PULADO PX2   silhuetas das 26 armas diferem (IoU par a par < 0,85)
2026-08-25T03:04:56.8702661Z                 exige browser — sem arnês dedicado (divida PX)
2026-08-25T03:04:56.8703175Z ·· PULADO PX3   mão travada no grip em todo frame de toda animação
2026-08-25T03:04:56.8703687Z                 exige browser/traço — sem arnês dedicado (divida PX)
2026-08-25T03:04:56.8704237Z ·· PULADO PX4   aliado × inimigo distinguíveis em 1 frame a 5/20/40 m
2026-08-25T03:04:56.8704713Z                 exige browser — sem arnês dedicado (divida PX)
2026-08-25T03:04:56.8704935Z
2026-08-25T03:04:56.8705129Z --------------------------------------------------------
2026-08-25T03:04:56.8705678Z CRÍTICAS: 38/54 passam  ← MAP2B, MAT2, TEX1 VERMELHAS (novas — reprovam)
2026-08-25T03:04:56.8706557Z DÍVIDAS:  VM1, VM3, VM9, VM12, VM20, VM16, VM18, VM19, BOT8, CHR1, CHR3, CHR4, CTF1 (KNOWN-RED.json — não reprovam, mas continuam devidas)
2026-08-25T03:04:56.8707183Z AVISOS:   VM15, BOT2, CHR5B fora do alvo
2026-08-25T03:04:56.8707569Z PULADAS:  5 (exigem browser ou arnês ausente)
2026-08-25T03:04:56.8708089Z --------------------------------------------------------
2026-08-25T03:04:56.8708304Z
2026-08-25T03:04:56.8718453Z ##[error]Process completed with exit code 1.


nada fora do normal no meu turno 🕵️

…telhado

O defeito de grafo que sustentava o "so vai por cima": o pe de cada escada
linkava no PROPRIO primeiro degrau (y=0,17 a 0,28 m) em vez do grafo do
terreo. Chao e telhado eram dois componentes (300 nos x 307) e nenhuma rota
spawn<->bandeira descia. Agora o pe procura o terreo excluindo os proprios
degraus e exige o vao livre.

- PRACA no meio (x -7,2..7,2, z -8,2..9): nenhuma casa, muro ou pilastra de
  beco nasce no retangulo. 150 m2 de sala, quadra pintada, traves, bancos,
  floreiras com arvore, mesa de bar, caixa d'agua e pneus como cover.
- DESCIDA NORTE (topo em NE) e DESCIDA SUL (topo em SW), cada uma a um plank
  do spawn, com ramal de beco proprio - e assim que o pe entra no circuito.
- Malha de navegacao no terreo (2,0 m, com diagonais): o chao sempre foi
  andavel fora do beco, mas so o beco tinha nos. Aresta so nasce com o VAO
  inteiro livre - testar so o ponto medio deixava a aresta pular muro fino.
- Alvenaria fechando o vao sob os lances: sem ela o chao sob a escada ficava
  andavel e cercado (7 celulas sem volta ao spawn).

Medido (eval:lajes-vertical): travessia por baixo custa 1,03-1,45x o flanco
por cima, com 51-63% do caminho no chao; visada das lajes para o terreo
20,4% -> 62,5%; praca 16 -> 150 m2. Portao do mapa 9/9.

Agent: Claude Code (Opus 5)
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
A copa da mangueira era tres esferas lisas de um verde so e lia como balao de
desenho na captura - elemento mais pobre do mapa mais bonito do jogo. Agora sao
oito massas sobrepostas em dois verdes com facetas e dois galhos.

Praca ganha voz e vida sem asset novo: loop cidade.mp3 (CC0 ja embarcado,
Freesound 362949, FONTE.md) com raio curto de 26 m contra os 60 m dos loops de
mapa - descer para o terreo SOA diferente de andar na laje. Mais dois pombos no
chao da praca e um caramelo cruzando a quadra.

Evidencia A/B em praca-ab/ na MESMA camera (o antes foi re-tirado com o mapa de
d954ca4 restaurado, senao nao e comparacao): do chao, parede de tijolo na cara
-> praca aberta com quadra; da laje leste, parede cega -> a praca inteira e quem
esta nela. Poses da praca acertadas no lajes-evidence-capture (as antigas
miravam o beco, nao a sala).

Agent: Claude Code (Opus 5)
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
… compartilhado

Achados da revisao-antes-do-push contra o proprio diff:

1. LV4 dizia "o mesmo teto da QUAD_ESPAC do map-check" e COPIAVA o 7.0.
   Comentario nao e mecanismo - e exatamente a licao 2. QUAD_ESPAC sai para
   tools/eval/limiares-mapa.mjs e MAP5 e LV4 passam a importar o mesmo numero.
2. nearestRoofNode(stair.roof) sem guarda: config sem `roof` devolvia undefined
   e o link entrava MUDO no grafo - escada existindo no pixel e nao para o A*.
   Agora estoura.
3. LAJES_CONNECTIONS tinha as 3 escadas antigas e nao as 5. Enumeracao envelhece
   no primeiro item novo; como a LA5 le o FONTE (spread nao serve), a lista fica
   literal e ganha guarda que estoura se escada nova nao entrar - provado com
   mutacao ("morde: escada DESCIDA SUL fora de LAJES_CONNECTIONS").
4. Pergunta 7 da skill - se o defeito voltar, o que fica vermelho? A correcao do
   vaoLivre (aresta pulando muro fino) nao tinha regua nenhuma. Entra a LV6: toda
   aresta de terreo andavel de ponta a ponta, medida com o _collide de PRODUCAO e
   raio 0,38, com o mutante aresta-fantasma. 1286 arestas, 0 atravessando solido.

O mutante aresta-fantasma sobreviveu na primeira versao (so exigia o meio
bloqueado e caia em par com ponta dentro de solido, que a LV6 pula de proposito);
corrigido para exigir as duas pontas andaveis. Os 4 mutantes mordem so o proprio
check: so-por-cima->LV1, praca-cheia->LV3/LV4/LV5, laje-cega->LV5,
aresta-fantasma->LV6. Portao do mapa 11/11.

Agent: Claude Code (Opus 5)
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
…CA.md

O orcamento de comentario do AGENTS.md e de 2 linhas em public/js, e eu tinha
escrito 13 blocos de 3 a 7 linhas narrando causa, numero e tentativa descartada
dentro do mapa. A eval:comentario reprovou, com razao. Historico, causa e numero
vao para o doc; o comentario aponta.

O doc guarda tambem as duas tentativas que custaram uma rodada cada e que o
codigo agora so referencia: escada no meio da praca (visada 62,4% -> 42,9%) e
divisas fechando o fundo de quintal (15 -> 97 celulas sem volta ao spawn).

Agent: Claude Code (Opus 5)
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
Agent: Claude Code (Opus 5)
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
@csbrasil-BOT csbrasil-BOT added needs-human-gameplay Mudança exige revisão humana de gameplay/render/HUD needs-staging Mudança precisa validação integrada em staging labels Aug 25, 2026
@estraga-codigo

Copy link
Copy Markdown
Collaborator

Esbirro

Esbirro · plantão da produção · 🕵️

check vermelho parado neste PR

Caution

Não sei classificar este vermelho. Segue o que o CI cuspiu — palpite de bot sobre bug alheio só atrapalha.

o quê valor
head 752f10b19142
checks vermelhos 2
classe outra
hora do plantão 2026-08-25T05:31:36.132Z

Vermelho:

portao (https://github.com/corosolto/client/actions/runs/32811743606/job/97692223415)
build (https://github.com/corosolto/client/actions/runs/32811743633/job/97692223349)

Rabo do log:

2026-08-25T05:12:39.6591237Z   sertanejo     revolver38      0.188   0.461   1.035      3.4   3.11       11.3
2026-08-25T05:12:39.6591867Z   punk          ak         ik   0.211   0.389   1.014     3.12   3.55       10.6
2026-08-25T05:12:39.6592347Z   doidinho-bairro p90        ik   0.215   0.495   1.008     1.92   3.92       10.6
2026-08-25T05:12:39.6592858Z   pagodeiro     pistol           0.19   0.399    1.12     1.93   2.98       10.4
2026-08-25T05:12:39.6593372Z   lenda-lanhouse m4         ik   0.211   0.414   0.993     4.14   3.49         10
2026-08-25T05:12:39.6593836Z   et            awp             0.152   0.404   0.956     3.78   2.71        9.7
2026-08-25T05:12:39.6594810Z   funkraiz      shotgun    ik   0.198   0.488   0.976     1.75   3.62        8.6
2026-08-25T05:12:39.6595683Z   caminhoneiro  md97       ik   0.285   0.497   0.907     1.22    6.5        8.4
2026-08-25T05:12:39.6596190Z   raul          deagle          0.191   0.443   0.963      4.2   3.16        7.8
2026-08-25T05:12:39.6596670Z   designer-ux   m4         ik   0.178   0.378   0.769     3.68    2.6        7.3
2026-08-25T05:12:39.6597176Z   motoca-cachorro-loko m4         ik   0.294   0.623   0.978     2.26   6.88          7
2026-08-25T05:12:39.6597693Z   bandeirante   mosin      ik   0.185   0.393   0.869     3.21   2.78        3.7
2026-08-25T05:12:39.6598158Z   microfonildo  m4         ik       0       0       0        0      0          0
2026-08-25T05:12:39.6598420Z
2026-08-25T05:12:39.6598531Z REPROVADOS: 22/62
2026-08-25T05:12:39.6598819Z -> tools/eval/select_inflate.json
2026-08-25T05:12:39.6599000Z
2026-08-25T05:12:39.6599556Z PORTÃO VERMELHO — 22 reprovados, acima do teto declarado de 12.
2026-08-25T05:12:39.6757705Z ##[error]Process completed with exit code 1.


de plantão: vi, registrei, hora no relógio 🕵️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-human-gameplay Mudança exige revisão humana de gameplay/render/HUD needs-staging Mudança precisa validação integrada em staging target:main PR apontando para a branch main

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants