Pular para o conteúdo

Como um caso é avaliado

Um caso não dá uma nota de zero a dez. Ele dá uma nota (score) em cada um dos seus critérios de rubrica (rubric criteria), e cada critério registra uma proficiência contra um componente de conhecimento no seu perfil.

Esta página explica o que é julgado e como. Ela não cobre o que o resultado vira depois — isso está em Níveis de Bloom e proficiência.

Nada no Fito soma os seus critérios. A rubrica de um caso declara um peso em cada critério, e o validador exige que esses pesos somem 100, mas nenhuma parte da avaliação, do envio ou do seu perfil lê esses pesos. Eles são um sinal para o autor do caso sobre importância relativa, não uma entrada para um total.

O que você recebe de volta é uma linha por critério, e o que fica guardado é uma proficiência por componente de conhecimento. Isso é proposital: um componente que você sabe aplicar e um componente de que você só ouviu falar são dois fatos diferentes, e um número médio esconde os dois.

Um caso carrega a sua rubrica no próprio repositório, em .case/rubric.yaml. Cada critério declara:

  • Um componente de conhecimento — o assunto do critério.
  • Um nível de Bloom — a profundidade que ele certifica para aquele componente.
  • Quatro descrições de nível, uma para cada nota de 0 a 3. Todo critério precisa descrever as quatro; uma rubrica sem uma delas não valida. Elas são uma escada de qualidade naquele único nível de Bloom — not_achieved, partial, achieved, exemplary — e não uma subida de um nível para o próximo.
  • Um método de avaliação — como a nota é obtida.

Você pode ler os critérios de um caso antes de começar. A capa do caso em /cases/<id> lista o componente de conhecimento e o nível de Bloom de cada critério. Os comandos e as descrições de nível ficam no repositório do caso, então você os vê depois de abri-lo.

A nota de um critério e o nível de Bloom dele medem duas coisas diferentes. A nota, de 0 a 3, diz o quão bem o seu trabalho atendeu ao critério. O nível de Bloom diz o quão fundo um critério atendido certifica.

Então uma nota 2 ou 3 registra o próprio nível de Bloom do critério como a sua proficiência, e uma nota 0 ou 1 registra NOT_ACHIEVED. Um 2 em um critério APPLICATION registra APPLICATION. Um 3 em um critério KNOWLEDGE registra KNOWLEDGE, nunca mais que isso: o 3 muda o retorno, não a profundidade.

A tabela completa, e o que NOT_ACHIEVED quer dizer ao lado de um componente em que você nunca foi avaliado, está em Níveis de Bloom e proficiência.

Um critério é julgado de uma entre quatro formas, e o método é escolha do autor do caso, declarada por critério.

Método Como a nota é obtida
automated Um comando roda no seu checkout. O código de saída e a saída dele são a evidência.
ai Os seus artefatos e o seu git diff são lidos e julgados contra uma dica escrita pelo autor.
hybrid O portão automatizado roda primeiro. Passou, fixa um nível; falhou, cai para ai ou human.
human Ninguém local consegue avaliar. Volta marcado como Needs human review.

Um comando automated que sai com código diferente de zero é evidência, não uma falha do processo. Uma suíte de testes que quebra é exatamente a entrada de que o avaliador precisa, então a execução segue e o código de saída e a saída entram no relatório.

Cada comando tem um orçamento de 15 minutos. Um que ainda esteja rodando depois disso é encerrado e reportado com código de saída 124. Isso também é evidência — um build que trava é avaliado como um build que falha, em vez de parar a execução inteira.

A avaliação roda na sua máquina, na sua própria assinatura de LLM. O servidor do Fito não guarda nenhuma chave de LLM e nunca vê o seu código nem os seus prompts. É por isso que a avaliação precisa de um provedor de LLM configurado no pi, e por isso que ela custa a você e não ao Fito.

Quem julga é uma persona trabalhadora chamada fito-performance-reviewer, que lê o relatório de evidências e o seu checkout. Ela pode ler o notes.md da solução exemplar para entender a justificativa do autor, e nunca coloca o código da solução na sua frente.

A mesma avaliação roda duas vezes, sob dois comandos.

/fito-evaluate <case-id>

Um ensaio contra o seu checkout local. Sem pull request, sem envio, sem nada escrito no seu perfil e sem precisar de login. Cada critério volta com a nota sobre 3, o rótulo correspondente, uma justificativa de uma frase e a proficiência que um envio registraria. Onde um critério automated ficou abaixo de 3, a saída capturada é mostrada para você ver o porquê. Rode quantas vezes quiser.

/fito-submit <case-id>

A mesma avaliação, para registro. Ela roda depois que o pull request é aberto, envia os resultados ao backend, move o envio para EVALUATED e escreve a proficiência no seu perfil.

Para o que o /fito-submit faz antes de avaliar, veja Enviar e ler o seu resultado.

Um caso pode carregar um quiz opcional de verificação de conhecimento em .case/quiz.yaml. Muitos casos não têm nenhum, então um caso sem quiz não é um caso incompleto.

As questões vêm em três tipos:

Tipo Como é avaliado
multiple_choice De forma determinística, em código: atendida ou não atendida. Nenhum modelo participa.
short_answer De 0 a 3, pela mesma persona que avalia a rubrica, no próprio nível de Bloom da questão.
code_snippet De 0 a 3, pela mesma persona.

Toda questão nomeia pelo menos um componente de conhecimento e um nível de Bloom, então um quiz registra proficiência do mesmo jeito que um critério de rubrica: uma nota 2 ou 3 registra o nível de Bloom da questão, e uma nota 0 ou 1 registra NOT_ACHIEVED.

Uma resposta de múltipla escolha é atendida ou não atendida

Seção intitulada “Uma resposta de múltipla escolha é atendida ou não atendida”

Uma resposta de múltipla escolha correta é atendida. Ela vale 2 e registra o nível de Bloom da própria questão. Uma resposta errada ou em branco não é atendida. Ela vale 0 e registra NOT_ACHIEVED. Não há crédito parcial, e nenhuma resposta vale 3.

Por isso o resultado aparece como correto ou incorreto, nunca como uma fração: 2/3 mostraria uma resposta certa como um ponto perdido. Uma questão aberta pode chegar a 3, então o resultado dela mantém a nota sobre 3.

O gabarito nunca chega à parte da sessão com que você conversa. O endpoint público GET /cases/{id}/quiz serve os enunciados e as alternativas e omite as respostas por completo, e durante a execução o gabarito fica só com a etapa de avaliação.

No /fito-evaluate o quiz é treino — você responde e vê as notas, e nada é registrado. No /fito-submit as respostas são avaliadas para registro.

Quando a rubrica e o quiz cobrem o mesmo componente

Seção intitulada “Quando a rubrica e o quiz cobrem o mesmo componente”

Eles são combinados pelo maior nível dos dois, sejam quais forem as notas por trás deles. Se a rubrica registra KNOWLEDGE para um componente e o quiz registra COMPREHENSION para o mesmo, o que fica no seu perfil é COMPREHENSION.

Um caso que traz um quiz e nenhuma rubrica avaliável é marcado como EVALUATED só pelo quiz.