prometeu-studio/discussion/workflow/agendas/AGD-0033-revise-scene-bank-editorial-model-to-single-tmx-per-scene.md

122 lines
10 KiB
Markdown

---
id: AGD-0033
ticket: studio-scene-pack-runtime-binary-contract
title: Revise Scene Bank editorial model to Studio-native scene with TMX import-export
status: accepted
created: 2026-04-30
resolved: 2026-04-30
decision: DEC-0030
tags: [studio, packer, runtime, scene, asset-pack, tiled, revision]
---
## Pain
A direcao aceita em `DEC-0029` e implementada por `PLN-0059` a `PLN-0061` tomou um atalho editorial errado: modelamos `1 layer -> 1 TMX`, com validacao e `Accept` por layer, quando o editor suportado (`Tiled`) opera naturalmente com `1 scene -> 1 TMX` contendo multiplos layers.
Isso gerou uma friccao estrutural:
- o fluxo atual separa artificialmente layers que pertencem ao mesmo mapa;
- o `Accept` por layer conflita com a necessidade de publicar uma scene coesa;
- o modelo atual esconde um erro conceitual ao tratar `TMX` como surface por layer, em vez de surface por scene;
- a integracao editorial ficou mais fraca justamente no editor que estamos suportando em wave 1.
Dominio owner desta agenda: `studio`.
Boundary explicito: `studio -> packer -> runtime`.
## Context
- `DEC-0029` fechou corretamente que `TMX`/`TSX` sao surfaces editoriais suportadas, nao canonicas, e que o contrato normativo de publicacao continua sendo o request `studio -> packer -> SCENE`.
- O erro nao esta nesse boundary canonico; o erro esta no shape editorial escolhido para a integracao com Tiled.
- A implementacao atual assumiu:
- `1 layer -> 1 TMX`;
- `1 TMX -> 1 TSX`;
- geracao, validacao e `Accept` com foco em layer.
- O problema observado no `tiled2` reforca essa distorcao: o fluxo de workflow passou a tentar aceitar layer isoladamente, quando o valor editorial real esta na scene inteira.
- O Tiled comporta um `TMX` com multiplos layers; cada layer pode ter seu proprio tileset referenciado no mapa, e o authoring natural da scene acontece nesse documento unico.
- O runtime continua nao dependendo de `TMX`; ele continua dependendo apenas do request canonico aceito e do payload binario `SCENE`.
## Open Questions
- [x] O modelo wave 1 deve ser formalmente revisado para `1 scene -> 1 TMX` com multiplos layers?
Resposta: parcialmente. Essa direcao corrige o erro imediato de `TMX por layer`, mas a escolha final nao eh promover `TMX unico` a surface principal. A direcao escolhida eh um modelo nativo de scene no Studio, com `TMX` tratado como formato suportado de import/export.
- [x] Devemos abandonar completamente `validate layer` e `accept layer`, deixando apenas `generate scene`, `validate scene` e `accept scene`?
Resposta: sim, e mais do que isso: no modelo escolhido esses verbos deixam de ser a surface principal do workflow editorial. O Studio passa a operar com `import` e `export` via wizard para formatos suportados, com `Tiled` como primeira opcao. A validacao ocorre sobre o formato canonico do asset de scene no `Analyse` ou no `Pack`, nao sobre o formato externo.
- [x] Como cada layer da scene referencia seu tileset no editor suportado?
Resposta: no caminho de compatibilidade com Tiled, o `TMX` pode carregar multiplos `TSX`, e a scene pode usar ate quatro tilesets distintos. Isso descreve a compatibilidade editorial do import/export, nao o modelo canonico interno do Studio.
- [x] Como representar layers com tamanhos independentes dentro da scene?
Resposta: o modelo da scene deve aceitar layers com tamanho proprio. No caminho Tiled, mapas infinitos continuam suportados como concern editorial. Camera boundaries ficam para iteracao posterior.
- [x] O `scene-bank.studio.json` deve continuar carregando `width`/`height` por layer, ou passar a carregar apenas metadata editorial complementar e bindings?
Resposta: o asset de scene deve manter uma entidade canonica propria, distinta do request de pack. `scene-bank.studio.json` pode continuar existindo como persistencia editorial dessa entidade, com metadata como `width` e `height` por layer quando fizer sentido, mas sem se confundir com o request `studio -> packer`.
- [x] Como o request canonico deve ser projetado sem reintroduzir dependencia canonica em formato editorial?
Resposta: o request `studio -> packer` continua existindo, mas como projeção derivada da entidade canonica do asset de scene, nao como a propria entidade editorial. `TMX` entra apenas como formato suportado de importacao/exportacao; `import` atualiza a entidade canonica a partir do `TMX`, e `export` sobrescreve o `TMX` a partir da entidade canonica.
- [x] O `import` de `TMX` deve aceitar qualquer alteracao editorial feita externamente no Tiled?
Resposta: nao. O `import` deve aplicar validacoes minimas de compatibilidade antes de alterar a entidade canonica. Mudancas como adicao de novos layers, adicao de novos tilesets, ou alteracao estrutural inesperada de layers/tilesets podem invalidar o `TMX` para importacao. Quando isso ocorrer, o Studio deve recusar o `import` e emitir logs/diagnostics claros de falha.
- [x] Como o fluxo de `TSX` deve se comportar para glyph tilesets especializados?
Resposta: o glyph tileset pode gerar `TSX`, e isso passa a ser tratado como `export` para formato suportado `TSX (Tiled)`. O `export` sobrescreve o arquivo existente ou cria um novo, seguindo a mesma filosofia do `TMX`.
- [x] Quais partes de `DEC-0029` permanecem validas e quais precisam ser substituidas explicitamente?
Resposta: permanece valida a parte que fixa `TMX`/`TSX` como surfaces editoriais nao canonicas e o request `studio -> packer` como contrato normativo. Deve ser substituida explicitamente a parte editorial implementada como `TMX por layer` e o workflow `generate / validate / accept` por layer.
## Options
### Option A - Keep per-layer TMX and patch workflow
- **Approach:** Manter `1 layer -> 1 TMX`, corrigir o bug de workflow de `Accept`, e ajustar a UX ao redor disso.
- **Pro:** Menor custo imediato sobre a implementacao existente.
- **Con:** Preserva o erro de modelagem editorial e continua desalinhado com o uso natural do Tiled.
- **Maintainability:** Fraca. Corrige sintomas sem corrigir o modelo.
### Option B - Revise to single TMX per scene and scene-level workflow
- **Approach:** Revisar a decision para `1 scene -> 1 TMX`, com multiplos layers editoriais no mesmo mapa, e mover `generate / validate / accept` para o nivel da scene.
- **Pro:** Alinha o Studio ao modelo real do Tiled e fecha um boundary editorial mais coerente.
- **Con:** Exige revisao normativa, refatoracao de specs e reimplementacao parcial do fluxo entregue em `PLN-0060` e `PLN-0061`.
- **Maintainability:** Forte. Remove a distorcao estrutural e preserva o contrato canonico correto.
### Option C - Introduce a Studio-native scene model now and demote TMX to import/export
- **Approach:** Parar de tratar `TMX` como surface principal e assumir imediatamente um modelo proprio do Studio, usando Tiled apenas como compatibilidade.
- **Pro:** Resolve de vez o acoplamento editorial ao Tiled.
- **Con:** Exige refatoracao mais profunda agora, incluindo suporte nativo de scene, import/export, migracao editorial e revisao dos plans ja executados.
- **Maintainability:** Melhor opcao de longo prazo. Remove o erro estrutural na raiz e abre espaco para multiplos editores suportados.
Escolha fechada na agenda: `Option C`.
## Discussion
A correção necessária parece ser de direcao, nao apenas de bug.
O problema central nao eh que o request canonico exista ou que o packer compile `SCENE`; isso continua correto. O problema eh que o lado editorial foi fatiado na unidade errada. Ao quebrar scene em `TMX` por layer, o Studio passou a operar contra a gravidade do editor suportado e abriu espaco para workflow incoerente.
A agenda convergiu para um passo adicional: mesmo o modelo `TMX unico por scene` ainda seria uma otimizacao em torno do Tiled, nao uma surface editorial suficiente para o Studio no medio prazo. A escolha da `Option C` fecha uma direcao mais limpa:
- preservar o boundary canonico `studio -> packer -> runtime`;
- introduzir um modelo nativo de scene no Studio como surface principal;
- tratar `TMX`/`TSX` como formatos suportados de importacao/exportacao e compatibilidade;
- substituir `generate / validate / accept` por um workflow de `import / export` guiado por wizard para formatos suportados;
- aplicar validacoes minimas de compatibilidade no `import`, com recusa e logs claros quando o artefato externo divergir estruturalmente do que o Studio suporta;
- validar a entidade canonica da scene no `Analyse` ou no `Pack`;
- manter o request canonico de pack como projeção derivada da entidade canonica da scene, e nao como espelho bruto de qualquer formato externo.
Isso substitui explicitamente a parte editorial errada de `DEC-0029`, sem reabrir a parte do contrato canonico de publicacao que continuou correta.
## Resolution
Recomendacao final da agenda:
- revisar `DEC-0029` para abandonar o modelo `TMX por layer`;
- nao promover `TMX unico por scene` a surface principal do produto;
- adotar um modelo nativo de scene no Studio como owner editorial principal;
- tratar `TMX`/`TSX` como formatos suportados de import/export e compatibilidade;
- substituir o workflow de `generate / validate / accept` por `import / export` com wizard;
- exigir validacoes minimas no `import` de `TMX`, com falha explicita quando houver divergencia estrutural nao suportada, como novos layers, novos tilesets, ou alteracoes estruturais equivalentes;
- tratar a geracao de `TSX` por glyph tileset como `export` para formato suportado `TSX (Tiled)`, com sobrescrita ou criacao do arquivo de destino;
- validar a entidade canonica do asset de scene no `Analyse` ou no `Pack`;
- preservar a separacao entre:
- entidade canonica do asset de scene no Studio;
- request `studio -> packer`;
- payload binario `SCENE` de runtime;
- preservar como normativa a parte de `DEC-0029` que fixa `TMX`/`TSX` como surfaces editoriais nao canonicas e o request `studio -> packer` como contrato de publicacao.
Proximo passo sugerido:
- emitir uma nova decision de revisao, substituindo explicitamente a porcao editorial de `DEC-0029`;
- derivar novos plans para `specs`, `studio` e `packer`, com migracao do fluxo atual;
- tratar a implementacao entregue em `PLN-0060` e `PLN-0061` como baseline a ser revisada, nao como forma final do modelo editorial.