Esta página é gerada no mesmo build do guia a partir da especificação canônica
docs/bia/LANGUAGE_SPEC.md, da versão raiz do compilador e de uma fixture que
atravessa o gate real. Se essas fontes divergirem, o build da documentação
falha em vez de publicar uma referência stale.
Versões e identidade#
- Compilador publicado nesta referência:
v3.1372.0 - Versão declarada pela especificação:
v3.1372.0 - Política: compatibilidade por versão exata; mudar a versão cria outro candidato e exige novos checks e receipt.
Estruturas fundamentais#
A BIA é uma linguagem tipada para descrever entidades, DTOs, enums, serviços e
regras observáveis. Os tipos primitivos publicados pela especificação são
string, int, decimal, float, bool, datetime, uuid, void e
Map; Type[] representa coleções.
entity User {
string name;
int age;
}
dto UserOutput {
string name;
int age;
}
@post("/users")
service UserOutput createUser(string name, int age) {
UserOutput output = new UserOutput();
output.name = name;
output.age = age;
return output;
}
Exemplo executável#
O arquivo abaixo é uma cópia byte a byte da fixture canônica validada pelo compilador no gate de release. O teste do site compara o download à fonte e o teste de release o compila novamente; “exemplo” aqui não significa pseudocódigo.
entity User {
string name;
int age;
}
dto UserOutput {
string name;
int age;
}
@post("/users")
service UserOutput createUser(string name, int age) {
UserOutput output = new UserOutput();
output.name = name;
output.age = age;
return output;
}
Política de compatibilidade#
Estado público atual: compatibilidade por versão exata, com corpus retroativo bloqueante.
O source, o artefato e o comprovante de entrega registram a versão do compilador que os produziu. Um candidato só pode ser chamado de verificado quando todos os checks declarados usam essa identidade exata; recompilar com outra versão cria um candidato novo e exige outro receipt.
O que conta como breaking change#
Uma mudança é breaking quando pode alterar um projeto existente em qualquer destes pontos:
- sintaxe aceita ou significado semântico;
- tipo, auth, status ou payload de API;
- bytes/estrutura do backend ou do Sofia gerados;
- comportamento de runtime, módulo ou stdlib;
- schema/migração de dados;
- identidade exigida pelo receipt, deploy ou toolchain.
O número v3.x.y identifica o release do toolchain histórico; ele não autoriza
inferir compatibilidade apenas pela semelhança do número. A evidência é o corpus
e o receipt.
Regra de evolução#
- Uma construção substituída entra em depreciação com diagnóstico, alternativa e documentação antes da remoção.
- A remoção precisa de entrada explícita no corpus com
migration_required, expressões de diagnóstico estáveis e um guia emdocs/bia/migrations/. - Projeto histórico classificado como
passprecisa continuar compilando. Uma falha nova, um digest de source inesperado ou uma migração sem o diagnóstico previsto bloqueia o release. migration_requirednão significa compatível: significa que o upgrade é recusado de forma conhecida e acionável. O projeto só volta apassdepois de migrado e revalidado.- Mudança de codegen que não quebra o source ainda cria bytes novos. Portanto, passa por F0/F1, canary e novo receipt; nunca reutiliza a prova anterior.
- Rollback promove os bytes verificados anteriores. Não recompila source antigo com o compilador novo no caminho de recuperação.
Corpus e gate#
docs/bia/language-compatibility-corpus.json fixa projetos/snapshots reais,
versão de origem, commit, digest e resultado esperado. O gate
scripts/tests/language-compatibility-corpus-test.mjs:
- recalcula o digest de todo input relevante;
- compila cada projeto com o compiler atual;
- exige sucesso dos casos
pass; - exige falha e todos os hints de migração dos casos
migration_required; - falha fechado em resultado, versão, source ou documento divergente.
O corpus inicial cobre projetos introduzidos nas versões v3.379.0, v3.932.0,
v3.987.0, v3.1000.0 e a remoção de @html em v3.1222.0. Ele cresce junto com
toda nova construção ou breaking change; não é uma amostra escolhida depois da
regressão.
Janela pública#
Enquanto o canary progressivo de T8.2.2 não estiver operacional:
- não existe promessa pública de compatibilidade automática entre versões;
- projetos permanecem fixados à identidade registrada no receipt;
- atualizar exige corpus verde, gates aplicáveis e novo receipt;
- ausência de diagnóstico/evidência bloqueia promoção;
- nenhuma copy pode prometer compatibilidade além do que o corpus mede.
Quando houver canary real, a janela pública será derivada dos resultados versionados — nunca declarada por intenção.
Fonte completa#
Esta página é a porta de entrada pública e não substitui a especificação completa. A referência publicada preserva o vínculo de versão e exemplos executáveis; o manual canônico continua sendo a fonte normativa usada pelos gates e pelo cérebro do coder.