ADR-0035: Inversão fail-safe do juiz de escalonamento
- Status: Accepted
- Data: 2026-07-01
- Responsáveis pela decisão: Waldemar Szemat
Contexto e definição do problema
Seção intitulada “Contexto e definição do problema”Toda barreira apoiada em LLM no sistema exceto esta falha em aberto (fail-open): ante um tempo limite, uma exceção, ou uma resposta do juiz vazia ou malformada, os juízes de escopo, persona e fundamentação deixam o turno passar, porque para uma dimensão que não é de segurança o custo de uma sobre-recusa é maior que o de uma rara omissão. A dimensão de escalonamento inverte essa assimetria de custo: uma emergência aguda perdida - AVC, anafilaxia, intenção suicida, hipoglicemia grave - é o dano catastrófico e irreversível, enquanto um template de emergência sobre-disparado é um incômodo limitado, $0 e não medido, já ratificado como comportamento de produto aceito (ADR-0034).
Um juiz semântico de escalonamento é adicionado atrás do piso determinístico para capturar as emergências es-419 e pt-BR idiomáticas, localizadas e ofuscadas que o piso ainda perde. Como esse juiz é construído copiando o classificador de escopo fail-open e invertendo cada ramo, o defeito de maior risco é um deixar-passar remanescente em um ramo de falha que reintroduziria em silêncio o fail-open no caminho crítico para a segurança. Como ratificamos o modo de falha invertido, a postura de limiar e a cota de latência como um contrato explícito, para que a inversão não possa ser erodida em silêncio?
Fatores de decisão
Seção intitulada “Fatores de decisão”- Recall acima de precisão em emergências agudas. Um sinal de alarme perdido custa muito mais que um sobre-disparado (a mesma assimetria que ADR-0005 / ADR-0034).
- Sem regressão de fail-open no caminho de segurança. A inversão deve ser total e auditável, não uma maioria de ramos de melhor esforço.
- Latência de cauda limitada. O caminho síncrono da barreira não deve estourar o orçamento de latência do turno ante um provedor de juiz lento ou travado.
- Um limiar defensável e não arbitrário hoje, sem sobre-afirmar uma calibração empírica ainda não rodada.
- O juiz nunca deve enfraquecer o piso determinístico já enviado.
Opções consideradas
Seção intitulada “Opções consideradas”- Inversão fail-safe (escalar ante todo desfecho não limpo) com um prior de limiar enviesado ao recall, um tempo limite duro e sem retentativas em linha (escolhida).
- Manter o juiz fail-open como o juiz de escopo e se apoiar só no piso determinístico para as falhas (rejeitada: um tempo limite ou queda do juiz deixaria passar em silêncio uma emergência aguda - a falha catastrófica exata que o juiz existe para fechar).
- Fail-safe, mas fixar o limiar de disparo a um valor calibrado empiricamente agora (rejeitada: a calibração com conjunto reservado não foi rodada; fixar agora sobre-afirmaria um valor medido e se adiantaria ao portão de calibração dedicado).
Resultado da decisão
Seção intitulada “Resultado da decisão”- Inversão fail-safe total. Cada falha de execução ou de formato escala: um tempo limite, uma exceção, pontuações ausentes, uma racionalização malformada, uma pontuação fora de faixa ou NaN, e uma resposta vazia ou truncada falham todas em direção ao escalonamento, cada uma marcada como um escalonamento impulsionado por erro. Um deixar-passar é alcançável a partir de exatamente dois ramos: um no-op de entrada vazia (não há nada a escalar, então o juiz não é chamado) e uma confiança de emergência bem formada estritamente abaixo do limiar de disparo. Nenhum ramo parseia de melhor esforço uma saída malformada - uma negação como “NÃO escalar” poderia ser mal interpretada - então uma saída fora do esquema é um gatilho fail-safe, não algo a resgatar.
- O limiar de disparo é um prior enviesado ao recall, não uma fixação empírica. Ele é semeado a partir de um resultado de limiar de decisão ótimo em custo (Elkan) só como âncora de sanidade, porque a confiança do LLM é descalibrada e sobre-confiante. É um valor de configuração limitado e ajustável pelo operador, e não se afirma que esteja calibrado contra um corpus rotulado reservado.
- Um tempo limite duro limitado sem retentativas em linha. A chamada síncrona ao juiz é envolvida em um tempo limite duro bem abaixo do orçamento de latência do turno; ao expirar, o turno falha seguro ao escalonamento. Não se adiciona uma segunda camada de retentativa no caminho síncrono - o juiz já tem uma retentativa interna, e uma segunda arriscaria uma explosão de latência de cauda. Um desmonte de requisição externo se propaga em vez de ser engolido.
- O juiz só ADICIONA escalonamentos; nunca estreita nem rescinde o piso. Ele roda só depois que o piso determinístico NÃO disparou e há um juiz configurado, e é combinado atrás do piso por conjunção, então nunca pode suprimir um acerto do piso - consistente com a postura ratificada de recall acima de precisão (ADR-0034). O caminho $0 e sem chave não constrói nenhum juiz e é idêntico byte a byte ao de antes.
- A calibração empírica é diferida. A calibração empírica do limiar de piso de recall sobre um conjunto reservado, o limiar fixado final, o bloqueio de corpus metamórfico, e o portão de CI fail-fechado com juiz ligado são diferidos a uma fase de portão dedicada. Isto envia o mecanismo no prior, só com provas de controle determinísticas.
Confirmação
Seção intitulada “Confirmação”- Uma matriz de injeção de falhas afirma que cada desfecho não limpo escala e que o único negativo limpo abaixo do limiar é o único deixar-passar invocado pelo juiz.
- As cotas de limiar e de tempo limite e os contadores de escalonamento distintos - impulsionado por política frente a impulsionado por erro, sem PII - são testados unitariamente.
- Um teste de paridade sem chave confirma que o caminho $0 do piso fica sem alteração.
Consequências
Seção intitulada “Consequências”Positivas
Seção intitulada “Positivas”- O modo de falha crítico para a segurança é agora um contrato explícito e citado, não um detalhe implícito de uma classe copiada: um revisor não pode reintroduzir em silêncio o fail-open sem falhar a matriz de injeção de falhas.
- O padrão enviesado ao recall mais o piso determinístico encaminham juntos as emergências agudas idiomáticas e localizadas ao template nativo do locale antes de qualquer recusa de dose mascarada ou de escopo.
- Uma tempestade de escalonamento por queda de provedor é observável e distinguível do sinal real via os contadores distintos de impulsionado por política frente a impulsionado por erro.
Negativas
Seção intitulada “Negativas”- A postura de escalar-tudo-ante-falha significa que uma queda de provedor inunda o sorvedouro de revisão humana com escalonamentos impulsionados por erro - a direção segura, mas uma carga de revisão que um disjuntor deve absorver depois.
- O prior está explicitamente descalibrado: até a calibração diferida, a fronteira de disparo é um palpite defensável, não um piso de recall medido.
Neutras
Seção intitulada “Neutras”- O fail-safe protege só contra falha de execução ou de formato. Um negativo bem formado mas confiantemente-errado abaixo do limiar não é capturado pela inversão; esse residual fica coberto pelo piso determinístico, que é por isso que ambas as camadas são retidas.
- Dois valores de configuração ajustáveis pelo operador e um contador de telemetria são adicionados à superfície.
Prós e contras das opções
Seção intitulada “Prós e contras das opções”Inversão fail-safe com um prior enviesado ao recall (escolhida)
Seção intitulada “Inversão fail-safe com um prior enviesado ao recall (escolhida)”- Bom, porque a inversão coincide com a assimetria de custo da emergência: um sinal de alarme perdido é o dano catastrófico, um sobre-disparo é um incômodo limitado de $0.
- Bom, porque o tempo limite duro limita a latência de cauda sem uma explosão de retentativas.
- Bom, porque um prior enviesado ao recall é honesto sobre não ser uma fixação empírica e difere a calibração a um portão dedicado.
- Ruim, porque pode gerar uma tempestade de escalonamento sob uma queda de provedor - a direção segura, mas uma carga de sorvedouro de revisão que a camada de operações deve absorver depois.
Manter o juiz fail-open (rejeitada)
Seção intitulada “Manter o juiz fail-open (rejeitada)”- Bom, porque é uma cópia sem diff do classificador de escopo fail-open bem entendido.
- Ruim, porque um tempo limite ou queda do juiz deixaria passar em silêncio uma emergência aguda - o modo de falha catastrófico exato que o juiz existe para fechar.
Mais informações
Seção intitulada “Mais informações”- ADR-0005: Barreiras e postura regulatória - a postura de recall acima de precisão do piso determinístico de escalonamento atrás do qual o juiz é combinado.
- ADR-0034: Piso de escalonamento cego à negação, ratificado - a postura de sobre-escalonamento ratificada que este juiz nunca estreita.
- ADR-0031: Calibração com portão de escalonamento e autolesão - a dimensão de calibração de escalonamento que este juiz alimenta.
- ADR-0003: Arcabouço de avaliação - a costura de juiz isolada que o juiz de escalonamento reutiliza sem alteração.
- Elkan, “The Foundations of Cost-Sensitive Learning,” IJCAI 2001 (o resultado de limiar de decisão ótimo em custo ao qual o prior é ancorado): https://cseweb.ucsd.edu/~elkan/rescale.pdf
- MADR 4.0.0: https://adr.github.io/madr/