Extensões locais tipadas
A API de pesquisa separa observações, sensores, submodelos de sinais e pesos de decisão. ACO continua sendo o padrão; adicionar um arquivo não muda experimentos antigos nem o terrário salvo.
Criar em um arquivo
Copie src/extensions/balanced.ts, altere id, version e as funções. O export default usa satisfies DecisionExtension. Os contratos ficam em src/modules/extensions/types.ts.
SensorSystem.sample(LocalInput)deriva sinais finitos de energia, carga e saídas adjacentes.DecisionSubmodel.compute(DecisionFrame)transforma sinais; recebe apenas observações e resultados anteriores da mesma decisão.DecisionPolicy.weights(DecisionFrame)devolve um peso não negativo por saída. A soma deve ser positiva; o simulador usa seu RNG por seed para amostrar.
Observações são cópias congeladas; não incluem World, posições globais, estoques, mapa completo ou referências mutáveis dos agentes. As saídas já passaram pela verificação física de passagem. A política não devolve uma posição e não escava, move alimento ou altera o relógio. Submodelos desta API são transformações locais de sinais, não substituições arbitrárias dos solvers de gases/solo.
Um peso só pode valer de 0 a 1.000.000. Sensores/submodelos têm até 16 instâncias por estágio, 32 sinais por instância e sinais finitos de módulo até 1.000.000. Saída inválida encerra o experimento com erro explícito, sem fallback silencioso.
Executar e comparar
npm run experiment -- --extension src/extensions/balanced.ts --seed MINHA-SEED --start established --profile generic-demo@1 --days 5 --out ensaio-novo
npm run compare:policy -- --extension src/extensions/balanced.ts --days 5 --replicates 4 --seed POLICY-43 --out comparacao-nova
A segunda CLI executa ACO e extensão com a mesma seed em cada réplica, guarda CSVs e manifestos individuais e produz comparacao.csv. Réplicas diferentes recebem seeds diferentes. O protocolo registra perfil, horizonte, identidade e hash da extensão. Contagens de decisões ajudam a distinguir uma política realmente acionada de um ensaio curto sem operárias.
O exemplo favorece conforto e evita visitas repetidas. É uma hipótese de programação, não um comportamento validado por espécie. Melhorar um resultado interno não demonstra maior realismo biológico. Comparações não substituem P3.
Reproduzir e restaurar
O plano/manifesto guarda {schema, id, version, sourceSha256}. O hash SHA-256 é da fonte com finais de linha normalizados para LF. Uma versão instalada não pode ser substituída por fonte diferente. Não se reutilizam registros de outra versão ou outro hash. O caminho local do arquivo não integra o manifesto.
No navegador, apenas extensões incluídas no bundle estão disponíveis. O exemplo é incluído; selecione sua referência no plano JSON do laboratório isolado. Um JSON nunca autoriza importar um arquivo ou URL. Extensões novas exigem compilação do bundle ou o argumento explícito --extension na CLI.
Ao restaurar um snapshot que usa extensão, a mesma identidade deve estar registrada antes de World.restore; identidade ausente ou alterada produz erro antes da continuação. Os módulos de desenvolvimento podem usar loadTrustedExtension antes da restauração. O resto do save e as colisões conservam os mesmos validadores.
Limite de confiança
--extension executa código local de desenvolvedor com as permissões do processo Node. Tipos, observações congeladas e validação de pesos são um contrato do modelo, não uma sandbox de segurança. Use somente arquivos revisados de confiança. Importações transitivas são responsabilidade do autor; o hash do manifesto identifica apenas o arquivo indicado. Para um pacote com dependências externas, fixe também versões/fontes em seu próprio protocolo.
Para reprodução científica, funções devem ser puras e determinísticas: não use Math.random, relógio real, rede, arquivos mutáveis ou estado global. A amostragem é feita pelo RNG do simulador, não pela extensão. Os testes do exemplo verificam repetição e limites locais; não certificam extensões de terceiros.
Ensaio registrado
Quatro réplicas pareadas, cinco dias, generic-demo@1 estabelecido. A escolha foi acionada de fato nas quatro execuções customizadas; resultados são internos ao modelo, sem evidência de superioridade biológica.
| Réplica | População ACO | População extensão | Decisões extensão |
|---|---|---|---|
| 1 | 25 | 23 | 71 |
| 2 | 23 | 25 | 89 |
| 3 | 29 | 21 | 88 |
| 4 | 28 | 23 | 88 |
Dados da comparação, protocolo completo e arquivos individuais com hashes.