~/h0wzy/work/generative-ai-e2 LEIAME.mdworkcvprivacy-policyen

generative-ai-e2

entregue programa de formação

Bootcamp Gen AI E2 da TCS.

2026-07-242026-08-02 · 71 commits

o_problema

Numa operação de ITSM o chamado nasce no Freshservice e o trabalho acontece no Jira. O tombamento de um para o outro é manual, e o vínculo entre os dois sistemas só existe como texto livre que alguém digitou no título do card.

o_que_faz

  • Freshservice para Jira: ingestão de tickets, roteamento para a squad correta, criação idempotente de issue, rastreabilidade e auditoria.
  • Um workspace ágil (sprint, backlog, quadro com drag-and-drop) projetado do Jira em tempo de requisição, sem cache.
  • Um laboratório de RAG local sobre a documentação do próprio repositório, indexado em SQLite com sqlite-vec e exposto por MCP.
  • Um assistente conversacional com upload de documento e busca em árvore.

stack

frontend

Next.js (App Router) · React 19 · Tailwind CSS v4 · shadcn/ui on Base UI

backend

Python 3.11+ · FastAPI · SQLAlchemy 2 · Alembic · PostgreSQL 16

outros

SQLite + sqlite-vec · sentence-transformers · OpenRouter · Model Context Protocol · GitHub Spec Kit

medido

Cobertura de vínculo, processo manual
72.9%312 de 428 cards exportados bateram com um chamado real
Campo oficial de chamado preenchido
1 / 428campo de chamado do Freshservice no export histórico
Acurácia do classificador
83.33%golden set de 19 casos, medido em 30/07/2026
Vetores de prompt injection que passaram
1 / 3a razão de o classificador ser entregue desligado

como_foi_construido

Spec-driven via GitHub Spec Kit: treze specs numeradas, cada uma com spec, plano, pesquisa, modelo de dados, lista de tarefas, quickstart, contratos e checklist de requisitos. Uma constituição de projeto que prevalece sobre o resto. Decisões arquiteturais registradas como ADRs numerados, 005 a 013.

O problema foi medido contra exports reais, não estimado. De 428 cards exportados, 368 traziam número de chamado extraível do título e 312 batiam com um chamado real, ou seja 72,9% de cobertura de vínculo. O campo oficial de chamado do Freshservice estava preenchido em exatamente um card entre 428. Contra a automação, onde o identificador vai num rótulo estruturado da issue em vez de depender de alguém digitá-lo, a cobertura é 100% por construção.

O README dedica mais espaço às limitações deliberadas do que às funcionalidades, e cada uma traz a razão e a condição de saída. Esse é o ponto do projeto, não uma ressalva a ele.

limitacoes_conhecidas

  • O classificador por LLM está implementado, testado e desligado por padrão. Contra um golden set de 19 casos medido em 30/07/2026: 83,33% de acurácia, 37,50% de abstenção, e um de três vetores de prompt injection passou. Assunto e descrição do chamado são entrada não confiável, escrita por quem abre o chamado, então ativar o classificador transferiria a escolha da squad de destino para essa pessoa. Enum fechado protege contra saída malformada, não contra saída válida-porém-manipulada.
  • A queda de acurácia frente ao provedor anterior, 100% para 83,33%, é declarada como esperada e não reportada como regressão: modelos diferentes, cada um medido honestamente contra o próprio provedor. O golden set decide, não confirma.
  • Situação de SLA não existe na origem. A fila tem coluna de SLA porque o requisito pede, mas nenhum prazo chega do Freshservice, então a coluna mostra um travessão com o rótulo "sem prazo conhecido na origem". Derivar um prazo do timestamp de retentativa seria inventar número que ninguém consegue auditar numa apresentação.
  • O workspace ágil não funciona offline, por decisão: cache de sprint mentiria numa demonstração ao vivo. Sem credencial, as telas renderizam estado nomeado (não configurado, não autorizado, indisponível, com rate limit) em vez de erro.
  • O Freshservice roda contra mock e não contra o tenant real, porque o administrador do cliente nunca liberou a API key. O enum de squad virou genérico, e a suíte de testes roda verde sem credencial e sem rede.
  • Uma dependência foi adicionada contra a própria regra do projeto de não adicionar dependência onde a instalada resolve. Está registrada como decisão consciente, não deixada quieta.

tempo de código rastreado

32 hrs 8 mins Fonte: WakaTime · rastreado desde 2026-03-17 até agora

voltar para todos os trabalhos