7.0 KiB
| id | ticket | title | status | created | resolved | decision | tags | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AGD-0024 | generic-memory-bank-slot-contract | Agenda - Generic Memory Bank Slot Contract | accepted | 2026-04-10 | 2026-04-10 | DEC-0012 |
|
Agenda - Generic Memory Bank Slot Contract
Contexto
Hoje o runtime e o host expõem bancos de memória principalmente pela ótica de bytes totais/usados, enquanto a organização real do hardware já é fortemente orientada a slots. No estado atual:
GFXeAUDaparecem como casos especiais espalhados entreAssetManager,MemoryBanks,AssetBridge, telemetria e overlay;- os pools concretos são específicos (
glyph_bank_pool,sound_bank_pool); - a visualização do overlay precisou reinterpretar um modelo em bytes para algo que, operacionalmente, é mais bem entendido como ocupação de slots.
O pedido do usuário é explicitamente mudar essa ênfase: manter bytes como detalhe secundário quando necessário, mas estruturar o modelo principal como memory banks by slots, com possibilidade de contrato específico no domínio de MemoryBanks para gerir esses valores.
Na continuação da discussão, o usuário endureceu a direção:
BankPolicydeve ser removido por completo;BankStatsdeve ser removido por completo;- o contrato exposto deve trabalhar somente com ocupação por slots, por exemplo:
glyph_slots_occupied / glyph_slots.len()sound_slots_occupied / sound_slots.len()
Problema
O modelo atual mistura dois níveis de abstração:
- Contrato de capacidade em bytes, útil para certificação e budgets;
- Contrato operacional por slots, que é o que o host e o programador realmente percebem ao lidar com banks.
Isso gera acoplamento e duplicação:
- o domínio conhece
GFXeAUDcomo exceções, em vez de bancos genéricos com propriedades próprias; BankStatsprivilegia bytes e trata slots como apêndice;MemoryBanksnão oferece um contrato consolidado para estatísticas e ocupação por slots;- o overlay precisa montar sua própria leitura mais útil em cima de um modelo que não foi desenhado para isso.
Com a direção nova do usuário, há um problema adicional: não basta rebaixar bytes a papel secundário no contrato exposto. As estruturas atuais que orbitam essa semântica (BankPolicy e BankStats) passam a ser vistas como parte do problema e não como base aceitável para a solução.
Pontos Criticos
- Fato: O hardware já é organizado por slots para glyph e sound banks.
- Fato: O overlay quer mostrar ocupação por slots, não capacidade em bytes.
- Fato: O usuário quer que o contrato exposto use apenas
used_slotsetotal_slots. - Fato:
BankPolicyeBankStatsnão devem permanecer como contrato nem como modelagem principal deste domínio. - Risco: Remover essas estruturas sem separar claramente contrato exposto e necessidades internas pode quebrar telemetria e certificação existentes.
- Risco: Se bytes continuarem aparecendo no contrato público, a refatoração perde seu objetivo.
- Tradeoff: Um contrato mínimo de slots simplifica host/overlay e o domínio exposto, mas exige reposicionar qualquer necessidade residual baseada em bytes.
Opcoes
-
Opção A (Recomendada): Introduzir um contrato genérico de memory bank orientado exclusivamente a slots no contrato exposto.
MemoryBankspassa a oferecer um contrato explícito para:- quantidade de slots;
- slots ocupados;
- consulta de slots;
- enumeração genérica de banks.
GLYPHeSOUNDtornam-se instâncias desse modelo.BankPolicyeBankStatsdeixam de existir como superfícies do contrato.
-
Opção B: Manter
BankPolicyeBankStatsinternamente, escondendo-os só no host.- Menor custo imediato.
- Não atende a direção explícita da discussão atual.
-
Opção C: Preservar um contrato híbrido com slots e bytes lado a lado.
- Dá continuidade incremental.
- Mantém exatamente a ambiguidade que o usuário quer remover.
Sugestao / Recomendacao
Seguir com a Opção A, com os seguintes princípios:
- O domínio de memory banks deve ser slot-first.
- O contrato exposto deve usar somente
used_slotsetotal_slots. BankPolicyeBankStatsdevem ser removidos por completo.MemoryBanksdeve possuir um contrato específico e explícito para ocupação por slots.- O host overlay deve consumir esse modelo genérico sem saber detalhes especiais de
GLYPHvsSOUND, além de rótulo e contagem. - A revisão deve evitar abstração vazia: o contrato genérico precisa mapear diretamente para
GlyphBankeSoundBank.
Nomenclatura canônica acordada para a camada genérica:
GLYPHSOUND
GFX e AUD não devem ser usados como nomes canônicos do contrato genérico de banks, pois são apelidos de apresentação e não os nomes corretos do domínio.
Perguntas em Aberto
- Nenhuma resposta final ainda sobre a forma exata do artefato, mas em 2026-04-10 o usuário fechou os seguintes direcionadores:
- a telemetria necessária deve ser gerenciada pelo
AssetManager, adicionando os banks ao payload; - a telemetria deve carregar somente o enum do tipo do bank, não uma abstração genérica adicional no contrato;
- o detalhamento operacional deve ocorrer por enum de slot;
- exemplos concretos do formato esperado ainda precisam ser avaliados antes de encerrar a agenda.
- a telemetria necessária deve ser gerenciada pelo
Respostas consolidadas desta rodada
- Origem da telemetria: não mover a genericidade principal para
MemoryBanks; oAssetManagerdeve gerenciar e expor a telemetria necessária dos banks. - Forma da telemetria: a telemetria exposta deve carregar somente o enum do tipo do bank.
- Detalhamento dos slots: a leitura operacional deve ser feita por enum de slot.
- Formato preferido: seguir com um resumo por bank no formato do exemplo 1 (
bank_type,used_slots,total_slots). - Bytes fake: bytes não devem continuar no contrato novo de telemetria dos banks.
- Certificação: as regras
max_gfx_bytesemax_audio_bytesdevem sair e ser substituídas por limites de slots paraGLYPHeSOUND. - Origem do contrato visível: o
AssetManagerdeve expor diretamente esse resumo por bank.
Exemplo alvo discutido:
pub struct BankTelemetry {
pub bank_type: BankType,
pub used_slots: usize,
pub total_slots: usize,
}
Origem esperada:
impl AssetManager {
pub fn bank_telemetry(&self) -> Vec<BankTelemetry> { ... }
}
Impacto já identificado para certificação:
- remover
max_gfx_bytes - remover
max_audio_bytes - substituir por algo como:
max_glyph_slots_usedmax_sound_slots_used
Criterio para Encerrar
Esta agenda pode ser encerrada quando houver direção fechada sobre:
- contrato genérico por slots;
- remoção completa de
BankPolicyeBankStats; - ponto de residência da abstração (
MemoryBanks, HAL, ou ambos); - impacto esperado em overlay, telemetria e
AssetManager. (Critérios atingidos em 2026-04-10)