A busca de formulações

Três das verificações do guardrail leem o que a pessoa disse: S1 (um turno que pede para enviar algo para fora, onde a ferramenta chamada não envia nada), S2 (um turno que nomeia um destino que a chamada não recebe) e a leitura de confirmação (a ferramenta da chamada lida contra o turno, com os valores comparados). Elas leem por um leitor determinístico com um conjunto fechado de palavras. A busca de formulações testa essas três verificações com toda formulação que pode mudar a resposta delas, e nenhuma outra.

Como é rodada

Em Python:

report = rail.search_wordings("pt-BR", checks=["s1_veto", "s2_veto", "confirm_read"], seconds=120)

No stalwart mcp: search_wordings(tools="tools.json", language="pt", seconds=60).

Ela roda o leitor de verdade, na sua máquina, pelo runtime licenciado: nenhum modelo e nenhuma rede além dele. Lê primeiro as formulações mais curtas e para no limite de tempo de cada verificação, dizendo até onde chegou.

Como as formulações são escolhidas: o cone de cada verificação

O leitor lê um turno pelas suas próprias palavras: as palavras das suas ferramentas, os seus arquivos de palavras e as palavras de moldura da gramática. Qualquer outra palavra chega a ele como um único símbolo, uma palavra que ele não tem. Então as formulações que importam para uma verificação são frases sobre as palavras que ela lê, o seu cone:

Verificação O seu cone Cresce com as suas ferramentas
S1 os verbos de envio (e um erro de digitação de cada), enviando uma "outra" coisa em toda moldura; e cada verbo de envio com cada coisa das suas ferramentas, e com cada lugar para onde algo é enviado, na moldura simples em uma formulação por verbo de envio para cada coisa nova
S2 cada ferramenta que não recebe destino, pedida com um destino de cada forma (um e-mail, uma URL), em toda moldura linearmente, um conjunto por ferramenta
Leitura de confirmação cada ferramenta, cada parâmetro dela nomeado pelas próprias palavras e dito com um valor da sua forma, em toda moldura menos a negada linearmente, um conjunto por parâmetro

As molduras são as da própria gramática: a instrução simples, palavras de pedido ("por favor"), enquadramentos, aberturas, formas de querer ("eu quero"), negações ("não") e junções ("e depois"). Elas vêm das palavras de moldura do toolkit, que o pacote carrega num arquivo conferido contra as listas do próprio toolkit. Qualquer outra palavra é uma palavra conferida como ausente das palavras do leitor.

O que cada verificação precisa responder

Uma formulação cuja resposta não é a esperada é um achado, com a formulação para repetir por check_call.

O que "exaustiva dentro do cone" afirma

O cone é conferido, não suposto. Uma amostra das formulações, e todo achado, é lida de novo com a "outra" palavra trocada por outras palavras ausentes, e as formulações emolduradas do S1 com uma das suas coisas no lugar. A resposta não pode mudar. Onde muda, o relatório diz que a busca não é exaustiva para aquela verificação e nomeia a palavra.

As formulações do S2 e da leitura de confirmação não têm "outra" palavra: toda palavra delas está no cone, então não há o que trocar, e o relatório delas diz isso.

O relatório de uma verificação é exaustivo onde toda formulação do seu cone foi lida dentro do limite e a conferência do cone valeu: dentro dos limites, nenhuma formulação daquelas palavras dá a resposta errada.

O que ela não consegue achar

Um verbo de envio, uma forma de destino ou um jeito de nomear um valor que o leitor não conhece. Esses ficam fora de todo cone, porque o leitor não tem palavra para eles. Palavras fora do cone acrescentadas a um turno não são buscadas, e nada é afirmado sobre o que o leitor faz com elas.

Os limites

seconds (o limite de tempo de cada verificação; 0 é sem limite), slips (um erro de digitação de cada verbo de envio: as duas últimas letras trocadas), joins (uma instrução junto de uma de leitura) e sample_every (com que frequência uma formulação é relida para a conferência do cone). Como referência: num catálogo de 4 ferramentas todo cone é lido em cerca de 25 s em inglês e 66 s em português; com 100 ferramentas, o S1 leva cerca de 70 s, o S2 cerca de 3 minutos e a leitura de confirmação cerca de 5.

Lendo o relatório

{"language": "en", "other": "zorvak", "bounds": {"seconds": 120, "slips": 1, "joins": true, "sample_every": 25},
 "tools": 4, "seconds": 18.94,
 "checks": [{"check": "s1_veto", "wordings": 4320, "read": 4320, "complete": true, "exhaustive": true, "seconds": 18.937,
             "findings": [{"wording": "post the note", "frame": "bare:thing", "expected": "declined_or_not_misread",
                           "got": {"s1": false, "misread_as": ["save_note"]}}],
             "abstraction": {"checked": 423, "holds": true, "words": []}}]}