SPRINT 24 · 10-JUL-2026v2.24 · OPEN SOURCELOOPS FECHADOS · JUDGE GATETIER FRONTIERCLAUDE FABLE 55 PROVIDERS · 13 MODELOSGPT-5.6 SOL · CODE PRIMARYGROK 4.5 · LIVE XQUALIDADE EM CASCATAPAINEL 2-DE-3ROUTER VIVO549/550 TESTES
Orquestrador multi-LLM em paralelo
Sprint 24 (10-jul-2026): fechamento de loops — o pipeline deixou de ser feed-forward. A origem foi um report executivo de deep research (Meta-Harness & Loop Engineering: harness move +7,3pp com modelo fixo; autocorreção só funciona com sinal externo — Reflexion 91% vs 80%; reward hacking 43× maior com scoring visível) somado a uma auditoria de código que achou 2 mecanismos implementados e mortos. Agora o router pondera sinal duplo (0.40 transporte + 0.30 qualidade + 0.20 custo + 0.10 latência), o record_feedback foi LIGADO (canal morto desde a Sprint 18), o judge tem consequência (REPROVADO → re-executa as 2 piores → re-julga → entrega flagged com quality_flag + exit code 3), o código gerado RODA num verifier com subprocess isolado, a cascata converge, o replan aborta com PlanCollapseError e um breaker de qualidade tira alias reincidente da frente da chain. Smoke real: US$ 0,24 — 7/7 tasks OK com o Google totalmente fora do ar (429). Tudo atrás de flags GEO_* com kill-switch (todas off = Sprint 23 byte-igual); 531 testes verde. Parque intocado: 5 providers / 13 modelos. Herança da Sprint 23: o GPT-5.6 Sol segue code primary e julgador cross-family por evidência de benchmarking (AA Coding Agent Index 80), com Luna no volume, COPY PREMIUM ONLY intacto e o tier frontier Claude Fable 5 preservado.
Snapshot do orquestrador: 15 sprints lançadas no período (Sprint 10 → 24), parque atual de 13 LLMs canônicos / 5 providers, tier frontier com o Claude Fable 5 e — no fecho — as Sprints 22 (SDK call-level), 23 (GPT-5.6 Sol + Luna, inserção evidence-driven) e 24 (fechamento de loops — meta-harness e qualidade com consequência). Estilizado para captura de tela — copie a imagem direto para slides.
15
Sprints no período
Sprint 10 → 24 (mai-jul)
549
Testes verde
+1 skipped +1 xfail · +79 do test_sprint24
5
Providers canônicos
Sprint 19 reintegrou o xAI (Groq segue fora)
21.189
LOC Python
44 arquivos · 14 módulos src
145
Commits totais
substantivos no período (Sprint 10 → 24)
53%
Coverage global
módulos novos 70-98%
Sprint 10 · 13-mai
Bateria 360 + 6 bugs corrigidos
Ping + doctor + finops + plan + run + board executados em sequência. Bug crítico Sonnet 4.6 dependencies-as-dicts resolvido. AVG_COST_PER_CALL Perplexity recalibrado 6× (real $0,05/call). Cap Perplexity de 0,50 → 0,35 protegeu wall time. 218/220 verde.
Sprint 11 · 17-mai
xAI Grok 6º provider + diversity guarantee
Grok 4.3 / 4.20-multi-agent / 4.20-non-reasoning adicionados com busca live em X/Twitter via search_parameters. 6 task types exclusivos. Diversity guarantee 4/6 providers em planos COMPLEX 5+. Upgrades simultâneos: Opus 4.6 → 4.7, Llama 3.3 → Llama 4 Scout (5× barato).
Sprint 12 · 17-mai
COPY PREMIUM ONLY + Perplexity prioridade
writing/copywriting/seo agora só GPT-5.5 → Opus 4.7 → Gemini Pro (Sonnet/Haiku/Flash banidos de copy). Cap Perplexity 0,35 → 0,50 restaurado. FALLBACK_CHAINS['research']: perplexity → gemini Pro → claude Opus → gpt-5.5. OpenAI gpt-4o → gpt-5.5 canônico.
Sprint 13 · 19-mai
Bateria E2E + 6 gaps fechados
Gemini 2.5 Pro ativado em analysis/fact_check/data_processing (era Flash). Sonnet 4.6 promovido a review primary (era Groq Heavy). Diversity target dinâmico min(plan, 5). Perplexity com return_citations + recency=year. model_id + citations persistidos no audit. thinkingBudget guard. UX wave preview no stdout.
Sprint 14 · 05-jun
Otimização FinOps do Gemini
Cap de thinkingBudget estendido a TODOS os Gemini *-pro, cobrindo o default gemini-3.1-pro-preview que rodava sem teto. Teto ajustável por env GEMINI_THINKING_BUDGET. Task code roteada de Gemini Pro para GPT-5.5 (Pro vira fallback) — Gemini era ~91% do custo LLM do pipeline de pesquisa.
Sprint 15 · 12-jun
Tier FRONTIER: Claude Fable 5
claude-fable-5 (13º modelo canônico, primeira classe Mythos pública, SOTA — SWE-Bench Pro 80.3%) primary de architecture/critical_review em complexity high, com fallback imediato Opus 4.8 em refusal dos classificadores de segurança. Pricing oficial corrigido: Opus 4.8 $5/$25, Haiku 4.5 $1/$5. 261 testes verde.
Sprint 16 · 08-jul
Consolidação: 4 providers · 9 modelos
Groq Inc e xAI Grok removidos do roteamento — Groq era bulk substituível a custo neutro; a xAI descontinuou a busca live na timeline X (HTTP 410 desde 29-mai). Novo Sonar Pro (perplexity_fast) assume realtime/social. QualityJudge migrou para Gemini Flash com anti-self-judging. Invariante TASK_TYPES == FALLBACK_CHAINS testado nos 23 task types + 37 sentinelas. Perdas documentadas: timeline X sem substituto, teto de contexto 2M → 1M. 312 testes verde.
Sprints 17-18 · 08-jul
Qualidade em Cascata + Router Vivo (dogfooding)
As duas sprints foram especificadas pelo próprio orquestrador (run de 13 tasks em 7 waves, 4/4 providers, US$ 0,4638). Sprint 17: verificador em cascata pós-geração pontua outputs economy que alimentam waves seguintes — score < 6.0 escala para o tier medium antes de propagar (teto 3/run); painel de juízes 2-de-3 cross-family em gates premium. Sprint 18: janela deslizante de 50 amostras domina o scoring do router, bateria canário semanal, priors de cold-start e shadow-routing (rampa da reintegração do xAI). 335 testes verde.
A rampa da Sprint 18 concretizada — parque volta a 5 providers / 11 modelos (Groq segue fora). Grok 4.5 vira primary de social_listening/brand_monitoring: o único do parque com busca LIVE na timeline do X (via Agent Tools API /v1/responses com x_search), restaurando a perda documentada do Sprint 16. Grok 4.20 Reasoning assume multi_perspective. Decisão ancorada em bench independente (Snorkel GDPval+: Grok líder em julgamento profissional) e validada contra a API viva (search_parameters legado depreciado; multi-agent não chamável). xAI ADITIVO — nunca primary de SWE nem copy premium; cap 0,35 (outage 1,75 ≥ 1,40). 383 testes verde no CI Linux.
Sprint 20 · 09-jul
Timeout resiliente e à prova de drift
Incidente real de deep research (sonar-pro vs prompt de ~17k chars estourando timeout) expôs um bug latente sistêmico: o ConnectionPool cacheia um cliente por provider e CONGELAVA o read timeout do 1º chamador, tornando TIMEOUT_BY_TASK_TYPE letra morta em runtime — research (600s) e architecture/critical_review (720s) eram cortados no default silenciosamente. Fix: timeout POR-REQUEST em cada .post() (pooling TCP/TLS intacto) + override explícito em decompose/summarizer/verifier. Folga generosa (bandas ~2x, DEFAULT 300s, GEO_TIMEOUT_MULTIPLIER); janela de contexto entre waves 2000→12000 chars. Três evoluções: timeout adaptativo no retry (estica o teto quando a chamada é comprovadamente lenta), sentinela de cobertura timeout_coverage no cli doctor e comando cli.py timeouts. 367 testes verde no CI Linux.
Sprint 21 · 09-jul
Robustez para autonomia 24/7 (revisão CTO-Fable)
Revisão de engenharia com as lentes do /cto-fable (Nuvini · decision-discriminators + intended-vs-implemented) sobre a tese: a máquina roda autônoma 24/7 (cron + Telegram + manual) e nem toda garantia declarada sobrevivia à concorrência e ao reroute em runtime. 5 achados corrigidos, 1 commit por achado, cada verify do relatório virou teste: (F1·HIGH) escrita atômica dos state files — o padrão do FinOps (SQLite WAL) propagado a router stats/calibração/índice do cache via tmp+os.replace com modo best_effort; (F2) redirect por budget re-verifica PROVIDER_SHARE_CAP, violação logada explicitamente; (F4) cache semântico exact-only para copy/research — colisão de público (dentistas↔advogados) impossível; (F3) ConnectionPool.shutdown real nos 6 call-sites do CLI; (F7) byte-identity do prompt via .gitattributes — o CRLF do Windows invalidava o prompt cache Anthropic entre plataformas. Suíte local Windows == CI Linux pela primeira vez: 383 testes verde, 0 falhas de artefato.
Sprint 22 · 09-jul
SDK call-level: call_llm() com o pipeline herdado
O orquestrador vira biblioteca sem perder a governança: call_llm() expõe uma chamada avulsa que HERDA timeout por task_type, fallback chain e FinOps do pipeline — consumidores externos deixam de reimplementar retry/timeout na mão. Primeiro consumidor: curso-factory, em modo opt-in (CURSO_FACTORY_LLM_BACKEND=sdk), sem mudança de comportamento até a ativação explícita. Fonte do catálogo instrumentada no manifest. 395 testes verde.
Sprint 23 · 10-jul
GPT-5.6 Sol + Luna — inserção evidence-driven
O GPT-5.6 (lançado 09/07) entra por evidência de relatório de benchmarking global. GPT-5.6 Sol ($5/$30, premium) vira PRIMARY de code — líder do AA Coding Agent Index (80 vs 77.2 do Fable; Terminal-Bench 88.8) — e julgador cross-family aditivo nas chains de analysis/code_review/critical_review/architecture. GPT-5.6 Luna ($1/$6, economy) entra em 7 chains de volume (classificação, extração, data processing, monitoramento, realtime). Terra ficou de fora — fora da fronteira de Pareto (Artificial Analysis: Luna/Sol dominam por custo). COPY PREMIUM ONLY intacto: GPT-5.5 segue copy primary (Sol é fraco em escrita one-shot, último de 6 no bench da Every) e o Fable segue frontier de julgamento/arquitetura (SWE-Bench Pro 80 vs 64.6). Parque: 5 providers / 13 modelos; cache OpenAI reprecificado por modelo (Luna -55% em cache hit no smoke real); caps openai 45%→50%, budget $70/dia (global $290), RPM 90/5. 451 testes verde + 1 xfail; validação viva: 4 chamadas reais, model ids confirmados, zero fallback.
Sprint 24 · 10-jul
Fechamento de loops — meta-harness e qualidade com consequência
O pipeline deixou de ser feed-forward. Origem: report Meta-Harness & Loop Engineering (harness move +7,3pp com modelo fixo; Reflexion 91% vs 80%; reward hacking 43× com scoring visível) + auditoria que achou 2 mecanismos implementados e mortos. Sinal duplo no router (0.40 transporte + 0.30 qualidade + 0.20 custo + 0.10 latência; byte-igual à legada sem amostras); record_feedback LIGADO (morto desde a S18); judge com consequência (flagged + exit code 3; REPROVADO_TECNICO com retry cross-provider); code verifier que RODA o código; cascata convergente; replan + abort (PlanCollapseError + exit code 4); breaker de qualidade com cooldown 6h; outer loops agendados; 6 invariantes anti reward-hacking. Smoke real US$ 0,24 — 7/7 tasks com o Google fora do ar. Flags GEO_* com kill-switch (todas off = S23 byte-igual). 531 testes verde; parque intocado.
Realtime · social · brand monitoring (perplexity_fast, S16)
Anthropiccap 45%
Haiku 4.5
Tasks simples · fallback bulk · ping · health
Entregas no repo geo-orchestrator · 27-abr → 10-jul
10 jul
Sprint 24 · Fechamento de loops (meta-harness e judge gate)
O pipeline deixou de ser feed-forward: sinal duplo no router (janela quality: separada do transporte; 0.40/0.30/0.20/0.10 com ≥3 amostras fortes), record_feedback LIGADO (canal morto desde a Sprint 18 — .router_feedback.jsonl nasceu em produção no smoke), judge com consequência (REPROVADO → re-executa as 2 piores → re-julga → flagged com quality_flag + exit code 3), code verifier que RODA o código (subprocess isolado, máx 2 fixes), cascata convergente, replan + abort (AdaptiveDecomposer reativado; PlanCollapseError + exit code 4; decompose com fallback cross-provider validado com Google 429 real), breaker de qualidade (cooldown 6h) e outer loops agendados (canário semanal + dogfooding mensal). Smoke US$ 0,24: 7/7 tasks OK com o Google fora do ar. 531 testes verde; parque intocado (13 modelos / 5 providers).
10 jul
Sprint 23 · GPT-5.6 Sol + Luna (inserção evidence-driven)
GPT-5.6 Sol ($5/$30) vira code primary — líder do AA Coding Agent Index (80 vs 77.2 do Fable; Terminal-Bench 88.8) — e julgador cross-family aditivo em analysis/code_review/critical_review/architecture. Luna ($1/$6) entra em 7 chains de volume. Terra fora (fronteira de Pareto). Copy premium intacto (GPT-5.5); Fable segue frontier (SWE-Bench Pro 80 vs 64.6). 5 providers / 13 modelos; cache OpenAI por modelo (Luna -55% em cache hit); caps openai 50%, budget $70/dia. 451 testes verde + 1 xfail; 4 chamadas reais, zero fallback.
09 jul
Sprint 22 · SDK call-level (B-019)
call_llm() expõe chamada avulsa herdando timeout por task_type, fallback chain e FinOps do pipeline. Consumo pelo curso-factory em modo opt-in (CURSO_FACTORY_LLM_BACKEND=sdk). Fonte do catálogo instrumentada no manifest. 395 testes verde.
09 jul
Sprint 21 · Robustez para autonomia 24/7 (revisão CTO-Fable)
5 achados corrigidos com verify virando teste: escrita atômica dos state files (tmp+os.replace, best_effort — aprendizado do router não se perde mais), cap de concentração re-verificado no redirect por budget (violação nunca silenciosa), cache exact-only para copy/research, ConnectionPool.shutdown real no CLI, byte-identity do prompt via .gitattributes (CRLF quebrava o cache Anthropic cross-platform). Local Windows == CI pela 1ª vez: 383 testes verde.
09 jul
Sprint 20 · Timeout resiliente e à prova de drift
Fix de bug latente: o ConnectionPool congelava o read timeout do 1º chamador por provider, tornando TIMEOUT_BY_TASK_TYPE letra morta (research/architecture cortados no default). Timeout agora POR-REQUEST no .post(). Folga generosa (research 600s, architecture/critical 720s), janela de contexto 2000→12000 chars, timeout adaptativo no retry, sentinela timeout_coverage no doctor + comando cli.py timeouts. 383 testes verde.
09 jul
Sprint 19 · Reintegração xAI (Grok 4.5 live X)
Parque volta a 5 providers / 11 modelos (Groq fora). Grok 4.5 primary de social_listening/brand_monitoring — busca live na timeline do X via Agent Tools API, restaurando a perda do Sprint 16. Grok 4.20 Reasoning em multi_perspective. Decisão por bench independente (Snorkel GDPval+) e testes contra a API viva; xAI aditivo. 383 testes verde, catalog v4.0.
08 jul
Sprints 17-18 · Cascata + Router Vivo
Especificadas pelo próprio orquestrador (dogfooding, 13 tasks em 7 waves, US$ 0,4638). Verificador em cascata pós-geração + painel de juízes 2-de-3 cross-family + janela deslizante de 50 amostras + canário semanal + shadow-routing. 335 testes verde.
08 jul
Sprint 16 · Consolidação 4 providers
Groq Inc e xAI Grok removidos do roteamento. Sonar Pro (perplexity_fast) assume realtime/social. QualityJudge em Gemini Flash com anti-self-judging. Invariante TASK_TYPES == FALLBACK_CHAINS + 37 sentinelas. 312 testes verde.
12 jun
Sprint 15 · Tier frontier Fable 5
claude-fable-5 primary de architecture/critical_review high + pricing oficial Opus 4.8 $5/$25 + refusal fallback intra-provider + parser de blocos thinking.
05 jun
Sprint 14 · FinOps Gemini
Cap de thinkingBudget estendido ao 3.x-pro (cobre gemini-3.1-pro-preview) + task code roteada para GPT-5.5 (Gemini Pro vira fallback).
19 mai
Sprint 13 · Bateria E2E + 6 gaps
Gemini Pro full + Sonnet review + diversity dinâmico + citations + model audit
19 mai
fix · 3 bugs E2E identificados
Calibração pós-bateria. TaskResult.model='?' resolvido. Perplexity body params validados.
17 mai
Sprint 12 · COPY PREMIUM ONLY
writing/copywriting/seo só GPT-5.5/Opus 4.7/Gemini Pro. Sonnet/Haiku/Flash banidos de copy.
17 mai
Perplexity prioridade research
Cap restaurado 0,35 → 0,50. FALLBACK_CHAINS['research'] reordenado para perplexity primary.
17 mai
OpenAI gpt-4o → gpt-5.5 canônico
Catalog YAML v2.1 sincronizado. Drift Sprint 11 fechado. API compat fix. Pricing $5/$15 por Mtok.
17 mai
Sprint 11 · xAI Grok 6º provider
Grok 4.3 + Multi-Agent + Fast. Busca live em X/Twitter. Diversity guarantee 4/6 em COMPLEX.
17 mai
Upgrade canônico LLMs 2026-05-17
Opus 4.6 → 4.7. Llama 3.3 70B → Llama 4 Scout 17B 16E (5× mais barato). Groq Heavy gpt-oss-120b.
Output expandido em todos os providers. Gemini analyzer ganhou 32k para artigos longos. Sem regressão em latência.
28 commits substantivos + 1 fix point release no período — mais recentes: Sprint 23 em 7167efb (GPT-5.6 Sol + Luna) e Sprint 24 (fechamento de loops — meta-harness · 531 testes)Histórico completo no GitHub →
O que o geo-orchestrator faz
Recebe uma demanda em linguagem natural (PT-BR), decompõe em tasks tipadas com dependências, distribui entre 13 modelos canônicos em 5 providers (Anthropic, OpenAI, Google, Perplexity, xAI) respeitando o cap por família e a diversity guarantee dinâmica (target = min(plan_size, 4)) em planos COMPLEX, executa em waves paralelas com cache semântico e validação por rubrica, grava métricas + model_id + citations, e devolve um relatório estruturado. Pós-Sprints 17-18 (especificadas pelo próprio orquestrador em run real de dogfooding), todo output do tier economy que alimenta waves seguintes passa por um verificador em cascata pós-geração — score abaixo de 6.0 re-executa a task no tier medium antes de propagar (teto 3 escalações/run) — e os gates premium (writing/copywriting/seo/architecture/critical_review) recebem veredito de um painel de juízes 2-de-3 cross-family, sempre excluindo o provider dominante do output. O router virou Router Vivo: janela deslizante de 50 amostras por (task_type, alias) domina o scoring adaptativo, bateria canário semanal cobre aliases ociosos e priors de cold-start acolhem alias novo. O roteamento primário segue o da Sprint 16: Claude Fable 5 (tier frontier) em architecture e critical_review, Gemini 3.1 Pro em analysis, Claude Sonnet 4.6 em review e code_review, Sonar Pro (perplexity_fast) em realtime/social/brand monitoring e Perplexity expondo citations array com URLs/DOIs.
Sprint atual
Sprint 24
Fechamento de loops
Suite de testes
549/550
verde (+1 xfail)
Coverage global
53%
módulos novos 70-98%
Sprints lançadas
24
abr-jul 2026
Linhas Python
21.189+
145 commits · 44 arquivos
LLMs canônicos
13
5 providers
Calls totais
1.474
$255.45 gastos
Catalog SoT
v4.1
13 modelos sincronizados
Stack técnico
Decisões priorizam zero dependência adicional quando possível, padrões da indústria quando necessário e tipagem forte em todas as camadas.
Python 3.12 + httpx async
Cliente HTTP unificado para os 5 providers canônicos (Sprint 19). Retry exponencial, token bucket, connection pooling com shutdown real, timeout POR-REQUEST (Sprint 20), escrita atômica de state files via atomic_io (Sprint 21) e SDK call-level com call_llm() (Sprint 22). ~16.3k LOC em 40 arquivos .py.
Pydantic v2
Modelos tipados Task/Plan/TaskResult/ExecutionReport. Validação runtime e serialização JSON. Sprint 10 ajustou _parse_plan para aceitar dependencies em list de dicts.
Click + Rich CLI
Interface com tabelas, spinners, timeline Gantt e output FinOps estruturado. 13 LLMs listados em cli.py models (Sprint 23); novo cli.py timeouts (Sprint 20) lista a banda efetiva por task_type.
Catalog YAML SoT
model_catalog.yaml é a fonte única em runtime. Hot-reload via GEO_CATALOG_PATH. Catalog v4.1: 5 providers e 13 modelos documentados canonicamente (cache OpenAI precificado por modelo desde a Sprint 23).
Sprint 16 recalibrou: planos COMPLEX 5+ tasks têm target = min(plan_size, 4) providers únicos — o alvo 5 (Sprint 13) era inatingível com 4 providers. Baseado em Mixture of Agents (Wang 2024), DAAO (2509.11079), AdaptOrch (2602.16873).
Audit observability (model_id + citations)
Sprint 13: TaskResult ganha model: str e citations: list[str] (URLs/DOIs de Perplexity). Fim do model='?' no execution_*.json — correlação direta entre regressão de qualidade e upgrade de modelo upstream.
Da demanda em linguagem natural até o relatório estruturado. Cada fase tem responsabilidade única e pode ser substituída isoladamente. Fases determinísticas (sem LLM) reduzem custo e latência; LLMs entram apenas onde raciocínio é necessário. Sprint 13 explicitou a fase Diversity Guarantee como etapa separada entre Smart Router e Plan Rebalance. A Sprint 17 inseriu um gate de cascata pós-wave: outputs do tier economy com tasks dependentes são pontuados por um verificador barato de outro provider antes de a wave seguinte começar — score abaixo de 6.0 re-executa no primeiro alias não-economy da chain (teto 3 escalações/run, cada escalação alimenta o feedback adaptativo do router).
01
01
Demanda em linguagem natural
INPUT
O usuário descreve a tarefa em PT-BR. Pode ser uma frase ou um briefing de 500 palavras com restrições, exemplos e referências.
02
02
Prompt Refiner
DETERMINÍSTICO
Pipeline de 3 etapas determinísticas (parse, enrich, optimize). Sem chamada de LLM. Inspirado em HALO (arXiv 2505.13516).
03
03
Decompose · Claude Sonnet 4.6
LLM CALL
Sprint 9 reverteu o decompose para Sonnet (wave 1 estável). Gera plano JSON com tasks tipadas e dependências. Fallback: Gemini → Opus.
04
04
Smart Router · classify_demand
LÓGICA
Classifica tier (SIMPLE/MODERATE/COMPLEX) com premium signals expandidos (Sprint 11). Define quantos LLMs participam e em qual tier.
05
05
Diversity Guarantee · target dinâmico
LÓGICA
Sprint 16: target = min(plan_size, 4) — com 4 providers canônicos, o alvo 5 da Sprint 13 era inatingível. _ensure_provider_diversity faz upgrades estratégicos quando o rebalance inicial não cobre o alvo. Plano de 4+ tasks busca 4 providers únicos.
06
06
Code-First Gate
DETERMINÍSTICO
Tasks determinísticas (slugify, JSON parse, regex) resolvidas sem LLM. Inspirado em Huryn/Medium. Economia ~30%.
07
07
Semantic Cache · Jaccard
DETERMINÍSTICO
Bag-of-words similarity sobre task description. Hit rate ~25%. TTL ajustado por Quality Judge.
08
08
Plan Rebalance · cap por provider (4 famílias)
LÓGICA
Pré-aloca cada task respeitando PROVIDER_SHARE_CAP. Anthropic ≤ 45%, OpenAI ≤ 45%, Google ≤ 60% (herda o bulk ex-Groq), Perplexity ≤ 50%. Invariante de outage: soma dos caps menos qualquer provider ≥ 1,40. Architecture/critical_review hard-pin (Sprint 15: Fable 5 frontier com fallback Opus 4.8). Copy (writing/copywriting/seo) tem hierarquia premium-only gpt-5.5 → Opus 4.8 → Gemini Pro — Sprint 16 endureceu: Flash/Haiku proibidos em qualquer slot.
09
09
Waves paralelas · asyncio.gather + UX preview
PARALELO
Tasks independentes executam simultaneamente em waves topológicas. Speedup observado: 2-5x. Sprint 13 adicionou wave preview em tempo real no stdout (>>> Wave N + [OK] tN -> provider) e expôs model_id + citations no TaskResult. Sprint 17 adicionou o gate de cascata pós-wave: outputs do tier economy que alimentam waves seguintes são pontuados 0-10 por verificador de OUTRO provider e, se score < 6,0, re-executados em alias não-economy antes de propagar (teto de 3 escalações por run) — output ruim da wave N não envenena a wave N+1.
Rubrica de 5 dimensões (factual, completude, PT-BR, eficiência, fontes). Verdict APROVADO/RESSALVAS/REPROVADO. Sprint 16 migrou o juiz de Groq para Gemini Flash (fallback Haiku 4.5) com anti-self-judging: via producer_provider, o juiz nunca é do provider dominante do output avaliado. Sprint 17: em runs com tasks premium/frontier (~10% dos casos), o veredito vem de um painel de 3 juízes de famílias distintas — mediana por dimensão, veredito mediano = maioria 2-de-3, sempre excluindo o provider dominante; juiz único segue no dia a dia.
11
11
Report + Health + KPIs
OUTPUT
execution_*.json com model_id + citations gravado, .kpi_history.jsonl atualizado, /health pollable (4 providers). Auto-trigger de recalibração se drift.
Code-First Gate
Huryn/Medium
Tasks determinísticas (slugify, JSON parse, regex match) resolvidas sem LLM. Reduz ~30% das chamadas em demandas com componente operacional.
Prompt Refiner
HALO · arXiv 2505.13516
Pipeline de 3 etapas (parse, enrich, optimize) que enriquece a demanda antes de decompor. Aumenta ~25% a qualidade do plano gerado.
Semantic Cache
AFlow · arXiv 2410.10762
Jaccard similarity sobre bag-of-words da task description. Hit rate ~25% em runs repetidos. TTL ajustado pelo Quality Judge.
Smart Router
CASTER · arXiv 2601.19793
Classifica demand tier (SIMPLE/MODERATE/COMPLEX) e marca complexity por task. Define quantos LLMs participam e em qual tier.
Adaptive Decomposer
HALO · arXiv 2505.13516
Macro-plan inicial pode ser detalhado wave-a-wave por demanda complexa. Reduz over-decomposition em demandas simples.
Quality Judge
Judging the Judges · arXiv 2604.23178
LLM-as-Judge com rubrica de 5 dimensões. Sprint 16 migrou o juiz para Gemini Flash (fallback Haiku) com anti-self-judging (parâmetro producer_provider). Sprint 17 promoveu os gates premium/frontier (~10% dos runs) a painel 2-de-3 cross-family: 3 juízes de famílias distintas, mediana por dimensão, veredito por maioria — sempre excluindo o provider dominante do output (mitiga self-preference bias, arXiv 2604.22891). Com 5 providers (Sprint 19), excluir o produtor deixa 4 famílias e o painel usa 3. Juiz único (Flash) segue no dia a dia.
Cascade Verifier
Cluster-Route-Escalate · arXiv 2606.27457
Sprint 17: verificador pós-geração barato de outro provider pontua (0-10) outputs do tier economy que alimentam waves seguintes; score < 6.0 re-executa no primeiro alias não-economy da chain antes de propagar — output ruim de wave N não envenena a wave N+1. Cascade retém 97-99% da acurácia do modelo mais forte; sinais pós-geração dominam routing puro quando o diferencial de custo é grande (arXiv 2605.06350). Teto 3 escalações/run com feedback adaptativo ao router.
Diversity Guarantee
MoA · Wang 2024 / DAAO 2509.11079 / AdaptOrch 2602.16873
Sprint 11 + 13 + 16: em planos COMPLEX 5+ tasks, _ensure_provider_diversity calcula target = min(plan_size, 4) providers únicos — a diversity floor fica nos 4 providers ORIGINAIS (resiliência de outage); o xAI reintegrado no Sprint 19 é aditivo, não forçado por diversidade. Invariante de outage: soma dos caps menos qualquer provider >= 1.40. Ensemble heterogêneo bate homogêneo em +7-15% quality (GSM8K/MATH) e reduz single-point-of-failure de 12% para 2% em outage.
Algoritmo · classify_demand() scoring
O SmartRouter classifica cada demanda em SIMPLE / MODERATE / COMPLEX antes de rotear qualquer task. O score é a soma de 4 dimensões — Sprint 11 adicionou premium signals que puxam demandas curtas com sinal crítico ("monitorar X agora", "debate de múltiplas perspectivas") direto pra COMPLEX.
Cada domínio detectado na demanda adiciona ao multi-domain score. Sprint 11 adicionou 3 domínios canônicos que invocam rotas específicas — re-roteadas na consolidação da Sprint 16: realtime (Sonar Pro / perplexity_fast, era xAI Grok), multi_perspective (Claude Sonnet 4.6, era grok_multi) e premium_reasoning (Claude Fable 5 → Opus 4.8).
Em planos COMPLEX com 5+ tasks, o router calcula o alvo de cobertura como target = min(plan_size, 4) (Sprint 16 recalibrou: o alvo 5 da Sprint 13 era inatingível com 4 providers canônicos). Se o rebalance inicial não atinge o alvo, o router faz upgrades estratégicos usando hints por provider ausente. Architecture e critical_review nunca são movidos (hard-pin). Baseado em Mixture of Agents (Wang 2024, +7-15% quality), RouteLLM (Ong 2024, single-point-of-failure 12% → 2%) e When Agents Disagree (mar/2026, 0,810 vs 0,512 win rate).
Anthropicordem de hint
1architecture → claude_fable (Fable 5, frontier)
2critical_review → claude_fable
3decomposition → claude_sonnet
4review → claude_sonnet (Sprint 13)
5code_review → claude_sonnet (Sprint 16, era Groq Heavy)
6multi_perspective_decomposition → claude_sonnet (fallback do Grok Reason, Sprint 19)
O caminho completo da demanda até o relatório, com os 6 pontos de decisão chave — incluindo o sinal em degraus do Router Vivo (Sprint 18: janela deslizante de 50 amostras por task_type e alias → canário semanal → prior de cold-start) e o gate de cascata pós-wave (Sprint 17: outputs do tier economy que alimentam waves seguintes são verificados por outro provider antes de propagar; score abaixo de 6,0 escala para o primeiro alias não-economy da chain, com teto de 3 escalações por run).
# 1. Refine + decompose
plan = Sonnet_4_6.decompose(refined_demand) # wave 1 estável
tier = classify_demand(demand, len(plan.tasks)) # SIMPLE/MODERATE/COMPLEX
# 2. Sinal do router em degraus (Sprint 18 — Router Vivo)
signal = window_50(task_type, alias) # janela deslizante DOMINA
or canary(alias) # bateria semanal cli.py canary
or cold_start_prior(alias) # Fable 0.92 … Haiku 0.83
score = 0.6*success + 0.2*custo + 0.2*latência # histórico acumulado = fallback
# drift visível em ~5 amostras
# GEO_SHADOW_ROUTE: conta tasks que TERIAM ido a um alias (log-only, zero gasto)
# 3. Plan rebalance (cap por provider × 4 famílias)
assignments = rebalance_plan_assignments(plan) # anthropic ≤45%, openai ≤45%,
# google ≤60%, perplexity ≤50%
# invariante de outage:
# soma − qualquer provider ≥ 1.40
# 4. Diversity guarantee (Sprint 11 + Sprint 16)
if tier == COMPLEX and len(plan.tasks) >= 5:
target = min(len(plan.tasks), 4) # Sprint 16: alvo 5 era inatingível
assignments = _ensure_provider_diversity(
assignments, plan.tasks, tier, target,
)
# Sprint 15: architecture/critical_review em complexity high sobem ao tier
# frontier (claude_fable); refusal do Fable 5 → fallback claude (Opus 4.8)
# 5. Execute em waves com circuit breaker + health-aware + UX preview
for wave in topological_sort(plan.tasks):
print(f">>> Wave {wave.n} ({len(wave)} em paralelo):") # Sprint 13
results = await asyncio.gather(*[
llm_client.query( # 5xx → 1 retry curto
assignments[task.id], task, # 429 → backoff 2/4/8s
check_breaker=True, # provider OPEN → skip <100ms
# Sprint 13: thinking_budget=max(512, min(2048, max_tokens/3)) p/ Gemini Pro
# Sprint 13: return_citations=true p/ Perplexity → TaskResult.citations
) for task in wave
])
# 6. Gate de cascata pós-wave (Sprint 17 — Qualidade em Cascata)
for out in economy_outputs_com_dependentes(results):
v = verify(out, verificador_de_OUTRO_provider) # score 0-10 · ~$0.0005/check
if v < 6.0 and escalations < 3: # teto: 3 escalações/run
out = re_run(task, primeiro_nao_economy(chain)) # antes de propagar:
router.registra_falha_adaptativa(alias_economy) # wave N não envenena N+1
# 7. Quality Judge (Sprint 16: Gemini Flash · Sprint 17: painel 2-de-3) + persist
if run_tem_tasks_premium_frontier: # ~10% dos casos
verdict = painel_2_de_3(results, rubric_5_dims) # 3 juízes cross-family, mediana
else: # por dimensão, excluindo sempre
verdict = GeminiFlash.judge(results, rubric_5_dims, # o provider dominante
producer_provider=dominant) # anti-self-judging
write(execution_id + ".json", report) # model_id + citations + KPIs
Multi-agente em paralelo · waves topológicas
O scheduler agrupa as tasks por dependências em waves e executa cada wave com asyncio.gather(). Tasks independentes na mesma wave rodam simultaneamente em LLMs diferentes — speedup observado em produção: 3-5×.
O fan-out é controlado pelo cap por provider (pré-alocação plan-level entre as 5 famílias) e pela diversity guarantee dinâmica em planos COMPLEX (target = min(plan_size, 4) providers únicos). O fan-in passa pelo Quality Judge (Sprint 16: Gemini Flash com anti-self-judging), que valida e ajusta o TTL do cache. Desde a Sprint 23, a Wave 2 executa code no GPT-5.6 Sol (líder do AA Coding Agent Index) e o GPT-5.6 Luna entra como reforço economy nas chains de volume.
Pipeline · 5 providers em waves topológicas
Demanda
Demanda
linguagem natural
Decompose · Sonnet 4.6
Decompose
Sonnet 4.6
Wave 1 · 7 LLMs paralelos (5 providers)
Sonar Deep
research +citations
Gemini Pro
analysis
GPT-5.5
writing
Gemini Flash
classification
Fable 5
architecture
Sonar Pro
current_events
Grok 4.5
social · live X
Wave 2 · 5 paralelos
GPT-5.6 Sol
code
Sonnet 4.6
review
GPT-5.5
copywriting
Fable 5
critical_review
Grok Reason
multi_perspective
Quality Judge · Gemini Flash
Quality Judge
Gemini Flash · 5 dims
Report · JSON + KPIs
Report
JSON + KPIs
asyncio.gather() · 5 providers · 13 modelos · GPT-5.6 Sol em code + Luna no volume (S23) · Grok 4.5 live X · speedup 3-5×
01
01
Fan-out controlado + diversity dinâmico
Decompose gera N tasks. Plan rebalance pré-aloca respeitando o cap por provider; _ensure_provider_diversity garante target = min(plan_size, 4) providers únicos em planos COMPLEX 5+ (a floor segue nos 4 providers ORIGINAIS; o xAI do Sprint 19 é aditivo, não entra na cota de diversidade). Anthropic ≤ 45%, OpenAI ≤ 45%, Google ≤ 60% (herda o bulk ex-Groq), Perplexity ≤ 50%. Invariante de outage: soma dos caps menos qualquer provider >= 1.40.
5 providers · floor min(plan, 4)
02
02
Waves topológicas + UX preview
DAG das dependências quebrado em níveis. Tasks no mesmo nível executam paralelo. Speedup = soma(durações)/wall_clock — KPI persistido. Sprint 13 adicionou preview por wave no stdout (>>> Wave N + [OK] tN -> provider) para acompanhamento em tempo real.
parallelism_efficiency
03
03
Fan-in com validação
Outputs consolidados passam pelo Quality Judge. Sprint 16 migrou o juiz para Gemini Flash (fallback Haiku) com anti-self-judging: o juiz nunca é do provider dominante do output avaliado. Verdict ajusta TTL do cache e pode disparar retry no próximo da fallback chain.
quality_judge_pass_rate
Sequencial vs paralelo · plano de 11 tasks (run #7 produção)
Cenário sequencial (hipotético)
~640s
soma de 11 task durations consecutivas
Paralelo em 4 waves (real)
204s
speedup ~3.2× · custo $0,07
−68% wall clock
13 LLMs canônicos · 5 providers
Cada LLM tem papel definido pelas suas forças. Pós-Sprint 16, Fable 5 reservado a architecture e critical_review (tier frontier, Sprint 15) com Opus 4.8 de fallback imediato em refusal dos classificadores de segurança; GPT-5.5 + Opus 4.8 + Gemini 3.1 Pro formam o tier premium-only de copy (writing/copywriting/seo — Flash/Haiku proibidos em qualquer slot das chains de copy, endurecido na Sprint 16); GPT-5.5 também é primary de translation pela qualidade PT-BR (Sprint 16) — code migrou para o GPT-5.6 Sol na Sprint 23 (líder do AA Coding Agent Index, 80 vs 77.2 do Fable; Terminal-Bench 88.8), que também atua como julgador cross-family aditivo nas chains de analysis/code_review/critical_review/architecture, enquanto o GPT-5.6 Luna ($1/$6) reforça 7 chains de volume; Perplexity sonar-deep-research é prioridade em research com return_citations=true + search_recency_filter=year (Sprint 13); Sonar Pro (perplexity_fast, novo na Sprint 16) assume realtime_search, social_listening, current_events e brand_monitoring (ex-xAI); Sonnet 4.6 decompõe wave 1 + primary em review, code_review e multi_perspective_decomposition (code_review foi upgrade deliberado num gate de qualidade); Gemini 3.1 Pro protagonista em analysis, fact_check e long_context_synthesis (1M ctx); Gemini 3.5 Flash primary em classification, summarization e extraction (fallback Haiku, custo neutro vs Groq) e sede do QualityJudge; Haiku 4.5 em tasks simples, fallback bulk, ping e health.
Sprint 12 · diretriz canônica: “COPY PREMIUM ONLY” — toda task de writing, copywriting ou SEO segue obrigatoriamente a hierarquia gpt-5.5 → claude-opus-4-8 → gemini-3.1-pro → perplexity. A Sprint 16 endureceu a diretriz: Flash e Haiku proibidos em qualquer slot das chains de copy (invariante testado). Decisão editorial de Alexandre Caramaschi: voz PT-BR densa exige reasoning nativo + 1M ctx; downgrade automático para tiers menores gerou incidentes documentados (curso saude-mental-vibecoding 14-05-2026).
Sprints 17-18 · o que NÃO mudou (à época): a matriz de roteamento primário dos 23 task types era a mesma da Sprint 16 — 9 modelos, 4 providers, catalog v3.0 (a Sprint 19 depois reintegrou o xAI e a Sprint 23 somou GPT-5.6 Sol/Luna → hoje 13 modelos / 5 providers / catalog v4.1). O que as Sprints 17-18 mudaram foi o algoritmo em volta: outputs do tier economy (Gemini Flash/Haiku) com tasks dependentes passam por verificador em cascata antes de propagar (score < 6.0 escala para o tier medium, teto 3/run), e o router pondera cada alias pela janela deslizante de 50 amostras por (task_type, alias) — success 60% / custo 20% / latência 20% — com canário semanal e priors de cold-start. Premissas do CEO: melhor modelo nas tarefas onde cada ponto de qualidade importa, economia nas simples; latência não é prioridade.
Nota histórica (Sprints 11-15): xAI Grok (com K) ≠ Groq Inc (com Q). xAI tinha modelos próprios dedicados aos task types realtime/social — a busca live em X via search_parameters foi descontinuada pela própria xAI em 2026-05-29 (HTTP 410); Groq Inc operava infra LPU para Llama 4 Scout e openai/gpt-oss-120b. A Sprint 16 removeu ambos do roteamento: Groq era bulk substituível a custo neutro por Gemini Flash, e a xAI perdera o diferencial que justificava o provider. Sentinelas em test_sprint16.py garantem que "groq"/"grok"/"xai" estão ausentes de todas as estruturas.
Rode o roteamento nos 5 providers
Escolha um task type e veja a demanda percorrer o caminho real: decompose em Sonnet, Smart Router e o provider vencedor. Derrube 1 ou 2 providers e o token cascateia pela fallback chain completa até o primeiro provider vivo. Novidade da Sprint 23: code roteia para o GPT-5.6 Sol (selo “5.6” no vencedor) e o GPT-5.6 Luna reforça as chains de volume — teste também classification ou extraction derrubando providers.
Custo estimado com carga típica de 1.500 tokens de entrada e 2.500 de saída sobre o pricing real do catalog v4.0. Em outage, o circuit breaker abre em 3 falhas e o token cascateia pela fallback chain cross-provider — a diversity floor cobre os 4 providers originais; o xAI é aditivo, roteado onde o bench prova valor.
Anthropic
Claude Fable 5
FRONTIER
alias: claude_fable
Context
1M
Input
$10.00
Output
$50.00
Custo relativo$60.00/Mtok
Tier frontier inaugurado na Sprint 15. Primeira classe Mythos disponível ao público (lançado 09-jun-2026), SOTA em quase todos os benchmarks (SWE-Bench Pro 80.3% vs 58.6% do GPT-5.5). Reservado a architecture e critical_review em complexity high; se os classificadores de segurança recusarem o request (stop_reason=refusal), o fallback imediato é Opus 4.8 — degrau intra-provider sem sair da família Claude.
Tier premium Anthropic, degrau imediato abaixo do Fable 5: assume architecture e critical_review quando o frontier recusa (refusal dos classificadores de segurança) e segue como fallback premium de copy. Modelo canônico Opus 4.8 desde 2026-05-29; pricing oficial $5/$25 por Mtok confirmado na Sprint 15.
Tier intermediário Anthropic. Sprint 9 promoveu Sonnet a decomposer canônico (wave 1 estável); Sprint 13 oficializou como REVIEW PRIMARY. Sprint 16 ampliou o papel: primary de code_review (era Groq Heavy; fallback GPT-5.5 — upgrade deliberado ~10x num gate de qualidade) e de multi_perspective_decomposition (era grok_multi). ~80% mais barato que Opus.
Tier econômico Anthropic. Acionado por downgrade automático em complexity LOW. Sprint 15 realinhou o pricing ao oficial ($1/$5 por Mtok); Sprint 16 o tornou o fallback do bulk ex-Groq (classification, summarization e extraction atrás do Gemini Flash) e do QualityJudge.
Pontos fortes
fast_inferenceclassificationsummarization
Primary em
fallback de classification, summarization, extractionQualityJudge (fallback)
OpenAI
GPT-5.5
PREMIUM
alias: gpt4o
Context
1M
Input
$5.00
Output
$15.00
Custo relativo$20.00/Mtok
Redator e copywriter PREMIUM canônico pós-Sprint 12. Upgrade Sprint 11 trocou model_id gpt-4o → gpt-5.5 (lançado 23-04-2026, 1M ctx + reasoning nativo + pt-BR otimizado); Sprint 12 oficializou como PRIMARY de writing/copywriting/seo na diretriz COPY PREMIUM ONLY; Sprint 14 assumiu code; Sprint 16 assumiu translation (qualidade PT-BR, era Groq) e virou fallback de code_review. Na Sprint 23 cedeu code ao GPT-5.6 Sol (evidência AA Coding Agent Index) e SEGUE copy primary — o Sol é fraco em escrita one-shot (último de 6 no bench da Every).
Inserido na Sprint 23 (10-07-2026) por evidência de relatório de benchmarking global: líder do AA Coding Agent Index (80 vs 77.2 do Claude Fable 5) e Terminal-Bench 88.8. PRIMARY de code e julgador cross-family ADITIVO nas chains de analysis/code_review/critical_review/architecture — amplia a diversidade de famílias no julgamento sem destronar o Fable, que segue frontier de arquitetura (SWE-Bench Pro 80 vs 64.6 do Sol). NÃO entra em copy premium: escrita one-shot é o ponto fraco (último de 6 no bench da Every).
Inserido na Sprint 23 (10-07-2026) como tier economy da família GPT-5.6: reforço em 7 chains de volume (classification, extraction, data_processing, social_listening, brand_monitoring, realtime_search, current_events) — slot aditivo, sem destronar Gemini Flash/Haiku. Com o cache OpenAI reprecificado por modelo, registrou -55% de custo em cache hit no smoke real. O irmão Terra ficou fora do parque: na fronteira de Pareto da Artificial Analysis, Luna e Sol o dominam por custo.
Analista profundo principal pós-Sprint 13. Upgrade 2.5 → 3.1 Pro (preview) em 2026-05-29 manteve 1M ctx. Sprint 13 corrigiu bug de thinkingBudget no 2.5 Pro — reserva 1/3 do max_tokens para thinking interno (mín 512, máx 2048) garantindo que parts[] não retorne vazio em respostas longas — e a Sprint 14 estendeu esse cap a todos os Gemini *-pro, cobrindo o 3.1-pro-preview que antes rodava sem teto. Primary em analysis e fallback de fact_check e data_processing; em code virou fallback do GPT-5.5 (Sprint 14). Sprint 16 herdou long_context_synthesis — o teto de contexto do pipeline passa de 2M (grok_multi) para 1M, perda documentada da consolidação.
Tier Flash do Google · adicionado Sprint 10 pós-outage 02-mai. Upgrade 2.5 → 3.5 Flash em 2026-05-29, GA em 08-jun-2026 sem mudança de pricing ($0,30/$2,50). Mantém 1M context com latência e custo bem menores que o Pro. Sprint 16 fez do Flash o cavalo de carga do bulk ex-Groq: primary de classification, summarization e extraction (fallback Haiku 4.5, custo neutro vs Groq) além de data_processing — e novo QualityJudge canônico (era Groq), com ANTI-SELF-JUDGING: o juiz nunca é do provider dominante do output avaliado (producer_provider). Sprint 17: outputs economy do Flash que alimentam waves seguintes passam pelo verificador em cascata de outro provider antes de propagar; em gates premium/frontier, o juiz único dá lugar ao painel 2-de-3 cross-family.
Pesquisador profundo. Sprint 13 ativou return_citations=true + search_recency_filter=year no POST body — LLMResponse e TaskResult agora expõem citations: list[str] (URLs/DOIs verificáveis) persistidos no JSON de auditoria. Bateria E2E validou Aggarwal SIGIR 2024 e Reyes-Lillo 2025 com DOIs reais. Sprint 12 restaurou cap 0,35 → 0,50 (era restritivo pós-bateria 360); adaptive_decomposer decompõe research em sub-tasks naturalmente.
Monitor live-web · adicionado na Sprint 16 (9º modelo canônico). Primary de realtime_search e current_events (busca web ao vivo com citações). Na Sprint 19 cedeu social_listening/brand_monitoring de volta ao Grok 4.5 (que tem a timeline X ao vivo) e virou o fallback desses dois — cobre web geral se o xAI cair.
Reintegrado na Sprint 19 (2026-07-09) como premium de NICHO. É o ÚNICO do parque com busca LIVE na timeline do X — primary de social_listening e brand_monitoring, restaurando a perda documentada do Sprint 16. Líder em julgamento profissional (Snorkel GDPval+ jul/2026: 29% vs 22% do GPT-5.5 e 21% do Opus 4.8 em jurídico/educação/saúde/QA), entra como reforço em analysis e nas chains de realtime/current. Decisão validada contra a API viva: o search_parameters legado foi depreciado → migrado para a Agent Tools API (/v1/responses com x_search). NÃO entra em SWE de ponta (fica abaixo de Opus/Fable) nem em copy premium PT-BR.
Reintegrado na Sprint 19 como primary de multi_perspective_decomposition — raciocínio estendido single-agent para múltiplos pontos de vista com veracidade rigorosa (espírito do antigo grok_multi). O modelo multi-agente da xAI não é chamável via chat completions (validado na API viva: 'Multi Agent requests are not allowed'), então usamos o reasoning single-agent, mais confiável. Fallback Claude Sonnet cobre outage do xAI.
O cap é aplicado por família de provider, não por alias. Anthropic (Fable 5 + Opus 4.8 + Sonnet 4.6 + Haiku 4.5) compartilha o mesmo teto de share por run; Google (Pro + Flash) herda o bulk ex-Groq com cap 60%; Perplexity (Sonar Deep Research + Sonar Pro) mantém os 50% da Sprint 12. A Sprint 19 reintegrou o xAI (Grok 4.5 + Grok 4.20 Reasoning) com cap 35% — aditivo, roteado onde o bench prova valor (live X em social/brand, multi_perspective). Invariante de outage testado: a soma dos caps menos qualquer provider é ≥ 1,40 — perder um provider inteiro ainda deixa capacidade de share para redistribuir o plano. O método rebalance_plan_assignments() pré-aloca cada task respeitando esses limites antes da execução; em planos COMPLEX 5+ tasks, o _ensure_provider_diversity() garante cobertura mínima dinâmica de min(plan_size, 4) providers únicos — a diversity floor segue nos 4 providers originais (resiliência de outage); o xAI é aditivo e não é forçado por diversidade.
Anthropic45%
Sprint 16 elevou 40% → 45% na consolidação. Fable 5 + Opus 4.8 + Sonnet 4.6 + Haiku 4.5 somados no mesmo teto: wave 1 (decomposition), review, code_review e os fallbacks Haiku do bulk precisam de espaço com 4 providers.
OpenAI50%
Sprint 23 elevou 45% → 50%: além de copy (GPT-5.5) e translation, a OpenAI passa a somar o code primary (GPT-5.6 Sol), o julgamento cross-family aditivo e o volume da Luna no mesmo teto. Budget diário $70 (global $290), RPM 90 (burst 5).
Google60%
Sprint 16 elevou 45% → 60%: o Google herda o bulk ex-Groq (classification/summarization/extraction no Flash) além de analysis, data_processing e long_context_synthesis. Inclui Pro + Flash somados. RPM subiu de 30 para 60 (burst 5).
Perplexity50%
Cap 50% desde a Sprint 12 ('Perplexity como prioridade em research'). Inclui Sonar Deep Research + Sonar Pro. Sprint 19: o Sonar Pro cedeu social_listening/brand_monitoring ao Grok, mantendo realtime_search/current_events como primary. RPM 30 (burst 3).
xAI35%
Reintegrado na Sprint 19 com cap 0,35: engaja em social_listening/brand_monitoring (Grok 4.5, live X), multi_perspective (Grok 4.20 Reasoning) e reforço em analysis sem dominar um run. Invariante de outage preservada — soma dos caps 2,35; pior caso (Google 0,60 fora) deixa folga 1,75 ≥ 1,40. Limite diário $40, RPM 60 (burst 3).
Mapa de roteamento · 23 task types canônicos
Cada tipo de task tem um primary (LLM padrão) e um fallback automático. Quando o primary falha, atinge timeout ou estoura o cap, a fallback chain assume sem perda de tarefa. Sprint 15 (12-jun-2026) elevou architecture e critical_review ao tier frontier: Claude Fable 5 primary em complexity high, com Opus 4.8 de fallback imediato em refusal. Sprint 16 (08-jul-2026) re-roteou os 23 task types na consolidação para 4 providers: o bulk ex-Groq (classification, summarization, extraction) foi para Gemini Flash com fallback Haiku a custo neutro; translation foi para GPT-5.5 (qualidade PT-BR); code_review subiu para Sonnet 4.6 com fallback GPT-5.5 (upgrade deliberado ~10x num gate de qualidade); e os task types realtime/social herdados do xAI passaram ao novo Sonar Pro (perplexity_fast). A Sprint 19 (09-jul-2026) reintegrou o xAI: social_listening e brand_monitoring subiram para o Grok 4.5 (busca live na timeline do X, restaurando a perda do Sprint 16), e multi_perspective_decomposition para o Grok 4.20 Reasoning.
Pesquisa profunda · Sprint 12 restaurou cap 0,35→0,50 e Sprint 13 ativou return_citations=true com search_recency_filter=year (DOIs/URLs persistidos)
fact_check
PESQUISA
Sonar Deep
Gemini Pro
Verificação factual · Sprint 13 oficializou Gemini Pro como fallback (era Flash) para preservar qualidade de fonte
analysis
CONSTRUÇÃO
Gemini Pro
GPT-5.5
Análise profunda · Gemini Pro primary (Sprint 13) · Sprint 16 alinhou o fallback a GPT-5.5 (cross-provider, sobrevive a outage Google)
data_processing
CONSTRUÇÃO
Gemini Flash
Haiku 4.5
Processamento de datasets em lote · Sprint 16 alinhou o fallback a Haiku 4.5 (cross-provider, mesmo tier de custo)
writing
CONSTRUÇÃO
GPT-5.5
Opus 4.8
Conteúdo longo PT-BR · COPY PREMIUM ONLY (Sprint 12) · Sprint 16 endureceu: Flash/Haiku proibidos em qualquer slot das chains de copy
copywriting
CONSTRUÇÃO
GPT-5.5
Opus 4.8
Copy persuasivo · COPY PREMIUM ONLY: fallback Opus 4.8 · chain premium-only endurecida na Sprint 16
seo
CONSTRUÇÃO
GPT-5.5
Opus 4.8
SEO de longa cauda · COPY PREMIUM ONLY: fallback Opus 4.8 · chain premium-only endurecida na Sprint 16
code
CONSTRUÇÃO
GPT-5.6 Sol
Gemini Pro
Geração de código de produção · Sprint 23 (2026-07-10) promoveu o GPT-5.6 Sol a primary por evidência (AA Coding Agent Index 80 vs 77.2 do Fable; Terminal-Bench 88.8), com Gemini Pro de fallback e GPT-5.5 na chain
review
VALIDAÇÃO
Sonnet 4.6
Gemini Flash
Review padrão · Sonnet 4.6 primary desde a Sprint 13; Sprint 16 trocou o fallback Groq Heavy por Gemini Flash
code_review
VALIDAÇÃO
Sonnet 4.6
GPT-5.5
Review de código · Sprint 16: Sonnet 4.6 primary (era Groq Heavy) com fallback GPT-5.5 — upgrade deliberado ~10x num gate de qualidade
architecture
VALIDAÇÃO
Fable 5
Opus 4.8
Desenho de arquitetura · Sprint 15 promoveu Claude Fable 5 (tier frontier) a primary em complexity high, com Opus 4.8 de fallback imediato em refusal
critical_review
VALIDAÇÃO
Fable 5
Opus 4.8
Validação final crítica antes de release · Sprint 15: Fable 5 (tier frontier) primary, fallback intra-provider Opus 4.8 em refusal dos classificadores de segurança
decomposition
CONSTRUÇÃO
Sonnet 4.6
Gemini Pro
Quebra de demanda em plano · Sprint 9 voltou pra Sonnet (wave 1 estável)
extraction
VELOCIDADE
Gemini Flash
Haiku 4.5
Extração estruturada · Sprint 16 migrou de Groq Heavy para Gemini Flash (fallback Haiku 4.5) a custo neutro
classification
VELOCIDADE
Gemini Flash
Haiku 4.5
Triagem ultra-rápida · Sprint 16: Gemini Flash assume o bulk ex-Groq com fallback Haiku 4.5, custo neutro
translation
VELOCIDADE
GPT-5.5
Gemini Flash
Tradução PT-EN, EN-PT e similares · Sprint 16 promoveu GPT-5.5 a primary (qualidade PT-BR, era Groq)
summarization
VELOCIDADE
Gemini Flash
Haiku 4.5
Resumo executivo de textos longos · Sprint 16: Flash primary (era Groq) com fallback Haiku 4.5
realtime_search
PESQUISA
Sonar Pro
Gemini Flash
Busca de eventos recentes · Sonar Pro no canal live-web · Sprint 19: Grok 4.5 entra na chain como reforço de frescor (timeline X)
social_listening
PESQUISA
Grok 4.5
Sonar Pro
Escuta social · Sprint 19 sobe para Grok 4.5 — busca LIVE na timeline do X, onde a conversa vive (restaura a perda do Sprint 16); fallback Sonar Pro (web geral)
current_events
PESQUISA
Sonar Pro
Gemini Flash
Eventos atuais via Sonar Pro · Sprint 19: Grok 4.5 como reforço na chain (cross-check na timeline X)
brand_monitoring
PESQUISA
Grok 4.5
Sonar Pro
Monitoramento de marca · Sprint 19 sobe para Grok 4.5 — menções de marca em tempo real na timeline do X; fallback Sonar Pro
multi_perspective_decomposition
CONSTRUÇÃO
Grok Reason
Sonnet 4.6
Decomposição multi-perspectiva · Sprint 19: Grok 4.20 Reasoning (raciocínio estendido, múltiplos pontos de vista — espírito do grok_multi); fallback Sonnet 4.6
long_context_synthesis
CONSTRUÇÃO
Gemini Pro
GPT-5.5
Síntese >500K tokens · Sprint 16: Gemini Pro 1M ctx primary (o teto 2M do grok_multi sai — perda documentada), fallback GPT-5.5 (1M ctx)
researchPESQUISA
primarySonar DeepfallbackGemini Pro
Pesquisa profunda · Sprint 12 restaurou cap 0,35→0,50 e Sprint 13 ativou return_citations=true com search_recency_filter=year (DOIs/URLs persistidos)
fact_checkPESQUISA
primarySonar DeepfallbackGemini Pro
Verificação factual · Sprint 13 oficializou Gemini Pro como fallback (era Flash) para preservar qualidade de fonte
analysisCONSTRUÇÃO
primaryGemini ProfallbackGPT-5.5
Análise profunda · Gemini Pro primary (Sprint 13) · Sprint 16 alinhou o fallback a GPT-5.5 (cross-provider, sobrevive a outage Google)
data_processingCONSTRUÇÃO
primaryGemini FlashfallbackHaiku 4.5
Processamento de datasets em lote · Sprint 16 alinhou o fallback a Haiku 4.5 (cross-provider, mesmo tier de custo)
writingCONSTRUÇÃO
primaryGPT-5.5fallbackOpus 4.8
Conteúdo longo PT-BR · COPY PREMIUM ONLY (Sprint 12) · Sprint 16 endureceu: Flash/Haiku proibidos em qualquer slot das chains de copy
copywritingCONSTRUÇÃO
primaryGPT-5.5fallbackOpus 4.8
Copy persuasivo · COPY PREMIUM ONLY: fallback Opus 4.8 · chain premium-only endurecida na Sprint 16
seoCONSTRUÇÃO
primaryGPT-5.5fallbackOpus 4.8
SEO de longa cauda · COPY PREMIUM ONLY: fallback Opus 4.8 · chain premium-only endurecida na Sprint 16
codeCONSTRUÇÃO
primaryGPT-5.6 SolfallbackGemini Pro
Geração de código de produção · Sprint 23 (2026-07-10) promoveu o GPT-5.6 Sol a primary por evidência (AA Coding Agent Index 80 vs 77.2 do Fable; Terminal-Bench 88.8), com Gemini Pro de fallback e GPT-5.5 na chain
reviewVALIDAÇÃO
primarySonnet 4.6fallbackGemini Flash
Review padrão · Sonnet 4.6 primary desde a Sprint 13; Sprint 16 trocou o fallback Groq Heavy por Gemini Flash
code_reviewVALIDAÇÃO
primarySonnet 4.6fallbackGPT-5.5
Review de código · Sprint 16: Sonnet 4.6 primary (era Groq Heavy) com fallback GPT-5.5 — upgrade deliberado ~10x num gate de qualidade
architectureVALIDAÇÃO
primaryFable 5fallbackOpus 4.8
Desenho de arquitetura · Sprint 15 promoveu Claude Fable 5 (tier frontier) a primary em complexity high, com Opus 4.8 de fallback imediato em refusal
critical_reviewVALIDAÇÃO
primaryFable 5fallbackOpus 4.8
Validação final crítica antes de release · Sprint 15: Fable 5 (tier frontier) primary, fallback intra-provider Opus 4.8 em refusal dos classificadores de segurança
decompositionCONSTRUÇÃO
primarySonnet 4.6fallbackGemini Pro
Quebra de demanda em plano · Sprint 9 voltou pra Sonnet (wave 1 estável)
extractionVELOCIDADE
primaryGemini FlashfallbackHaiku 4.5
Extração estruturada · Sprint 16 migrou de Groq Heavy para Gemini Flash (fallback Haiku 4.5) a custo neutro
classificationVELOCIDADE
primaryGemini FlashfallbackHaiku 4.5
Triagem ultra-rápida · Sprint 16: Gemini Flash assume o bulk ex-Groq com fallback Haiku 4.5, custo neutro
translationVELOCIDADE
primaryGPT-5.5fallbackGemini Flash
Tradução PT-EN, EN-PT e similares · Sprint 16 promoveu GPT-5.5 a primary (qualidade PT-BR, era Groq)
summarizationVELOCIDADE
primaryGemini FlashfallbackHaiku 4.5
Resumo executivo de textos longos · Sprint 16: Flash primary (era Groq) com fallback Haiku 4.5
realtime_searchPESQUISA
primarySonar ProfallbackGemini Flash
Busca de eventos recentes · Sonar Pro no canal live-web · Sprint 19: Grok 4.5 entra na chain como reforço de frescor (timeline X)
social_listeningPESQUISA
primaryGrok 4.5fallbackSonar Pro
Escuta social · Sprint 19 sobe para Grok 4.5 — busca LIVE na timeline do X, onde a conversa vive (restaura a perda do Sprint 16); fallback Sonar Pro (web geral)
current_eventsPESQUISA
primarySonar ProfallbackGemini Flash
Eventos atuais via Sonar Pro · Sprint 19: Grok 4.5 como reforço na chain (cross-check na timeline X)
brand_monitoringPESQUISA
primaryGrok 4.5fallbackSonar Pro
Monitoramento de marca · Sprint 19 sobe para Grok 4.5 — menções de marca em tempo real na timeline do X; fallback Sonar Pro
multi_perspective_decompositionCONSTRUÇÃO
primaryGrok ReasonfallbackSonnet 4.6
Decomposição multi-perspectiva · Sprint 19: Grok 4.20 Reasoning (raciocínio estendido, múltiplos pontos de vista — espírito do grok_multi); fallback Sonnet 4.6
long_context_synthesisCONSTRUÇÃO
primaryGemini ProfallbackGPT-5.5
Síntese >500K tokens · Sprint 16: Gemini Pro 1M ctx primary (o teto 2M do grok_multi sai — perda documentada), fallback GPT-5.5 (1M ctx)
Invariante testado desde a Sprint 16 (tests/test_sprint16.py): para todo task type, TASK_TYPES[t].primary == FALLBACK_CHAINS[t][0] e fallback == chain[1] — a tabela acima é, por construção, o início exato de cada fallback chain (fecha o drift histórico entre as duas estruturas). Toda chain cobre os 4 providers originais (resiliência de outage); a Sprint 19 reintegrou o xAI como 5º provider aditivo (grok/grok_reason vivos) — sentinelas garantem que só groq (Groq Inc) segue ausente das estruturas de roteamento. Desde a Sprint 17, outputs do tier economy (Gemini Flash/Haiku) que alimentam waves seguintes passam por um verificador em cascata antes de propagar — score abaixo de 6,0 re-executa no primeiro alias não-economy da chain (arXiv 2606.27457: cascade retém 97-99% da acurácia do modelo mais forte).
Cada sprint resolveu uma tese específica: fundação CLI, otimização de custo, observabilidade, self-healing, reliability, enterprise readiness, rebalanceamento Gemini-first, resiliência em produção, hardening de bateria 360, xAI Grok como 6º provider com diversity guarantee, COPY PREMIUM ONLY + Perplexity prioridade na Sprint 12, bateria E2E com 6 gaps fechados na Sprint 13, otimização FinOps do Gemini na Sprint 14, tier FRONTIER inaugurado com o Claude Fable 5 na Sprint 15 (primary de architecture/critical_review high, fallback Opus 4.8 em refusal), Sprint 16 (08-jul-2026) com a consolidação em 4 providers — Groq Inc e xAI Grok removidos do roteamento, novo Sonar Pro (perplexity_fast) em realtime/social, QualityJudge migrado para Gemini Flash com anti-self-judging, invariante TASK_TYPES == FALLBACK_CHAINS testado nos 23 task types + 37 sentinelas — e, últimas, Sprints 17-18 (08-jul-2026), especificadas pelo próprio orquestrador em run real de dogfooding (13 tasks em 7 waves, 4/4 providers, US$ 0,4638): Qualidade em Cascata — verificador pós-geração sobre outputs do tier economy que alimentam waves seguintes (score < 6.0 escala para o tier medium, teto 3/run) + painel de juízes 2-de-3 cross-family em gates premium — e Router Vivo — janela deslizante de 50 amostras por (task_type, alias), bateria canário semanal, priors de cold-start e shadow-routing (log-only). A Sprint 19 (09-jul-2026) CONCRETIZOU a rampa do shadow-routing — reintegração do xAI: Grok 4.5 (busca live na timeline do X, social_listening/brand_monitoring) e Grok 4.20 Reasoning (multi_perspective), com o xAI ADITIVO. A Sprint 20 (09-jul-2026) endureceu a resiliência de timeout: um bug latente onde o pool de conexões congelava o read timeout do 1º chamador por provider tornava as bandas por task_type letra morta em runtime (research/architecture cortados no default) — corrigido com timeout POR-REQUEST no .post(), folga generosa nas bandas (research 600s, architecture/critical 720s), janela de contexto entre waves 2000→12000 chars, timeout adaptativo no retry, sentinela de cobertura no cli doctor e o comando cli.py timeouts. A Sprint 21 (09-jul-2026) fechou a revisão CTO-Fable (lentes de decision-discriminators e intended-vs-implemented): escrita atômica dos state files (o padrão de atomicidade do FinOps propagado ao router/calibração/cache), redirect por budget re-verificando o cap de concentração (violação explícita, nunca silenciosa), cache semântico exact-only para copy/research, ConnectionPool.shutdown real e suíte local Windows idêntica ao CI pela primeira vez. A Sprint 22 (09-jul-2026) abriu o orquestrador como biblioteca: SDK call-level com call_llm() herdando timeout por task_type, fallback chain e FinOps do pipeline — primeiro consumidor externo (curso-factory) em modo opt-in. A Sprint 23 (10-jul-2026) inseriu o GPT-5.6 por evidência de benchmarking global: GPT-5.6 Sol vira primary de code (AA Coding Agent Index 80 vs 77.2 do Fable; Terminal-Bench 88.8) e julgador cross-family aditivo nas chains de analysis/code_review/critical_review/architecture; GPT-5.6 Luna entra em 7 chains de volume; o Terra ficou de fora da fronteira de Pareto. COPY PREMIUM ONLY intacto (GPT-5.5 segue copy primary) e Fable 5 preservado como frontier de julgamento/arquitetura. A Sprint 24 (10-jul-2026) fechou os loops — meta-harness e qualidade com consequência: o pipeline deixou de ser feed-forward. Sinal duplo no router (janela quality: separada do transporte; 0.40 transporte + 0.30 qualidade + 0.20 custo + 0.10 latência, byte-igual à legada sem amostras), record_feedback LIGADO (canal morto desde a Sprint 18), judge com consequência (REPROVADO → re-executa as 2 piores → re-julga → entrega flagged com quality_flag + exit code 3), code verifier que RODA o código gerado em subprocess isolado, cascata convergente, replan + abort (AdaptiveDecomposer reativado; PlanCollapseError + exit code 4), breaker de qualidade com cooldown 6h, outer loops agendados (canário semanal + dogfooding mensal) e 6 invariantes anti reward-hacking — tudo atrás de flags GEO_* com kill-switch. Smoke real US$ 0,24 com o Google fora do ar: 7/7 tasks OK. Parque intocado: 5 providers / 13 modelos, 531 testes verde. Próximas sprints implementam topology-first routing (AdaptOrch fev/2026) e difficulty-conditional depth (DAAO set/2025). Roadmap atualizado em tempo real com origem de cada decisão.
Timeline · 24 sprints lançadas
De abril a julho de 2026, vinte e quatro sprints entregaram desde a fundação do CLI até o fechamento de loops da Sprint 24 (meta-harness e qualidade com consequência: sinal duplo no router, judge gate com quality_flag + exit code 3, code verifier que roda o código, replan + abort e breaker de qualidade — parque intocado). Antes, a Sprint 23 inseriu o GPT-5.6 por evidência (Sol como code primary e julgador cross-family, Luna nas chains de volume); as Sprints 17-18 (Qualidade em Cascata + Router Vivo) foram especificadas pelo próprio orquestrador em dogfooding; a Sprint 19 reintegrou o xAI (Grok 4.5 com busca live na timeline do X) e a Sprint 22 abriu o SDK call-level — parque de 5 providers, 13 modelos, invariante TASK_TYPES == FALLBACK_CHAINS testado nos 23 task types.
1+2
FOUNDATION2026-04-07● LANÇADA
Sprints 1+2 — Refator CLI v2.0 + Cap 80% real
11 fixes P0/P1 cirúrgicos validados por bateria científica
11 fixes P0/P1 cirúrgicosCap 80% real (era vaporware)Tier interno Claude Opus/Sonnet/HaikuBateria científica com 3 runs comparativosSuite test_integration: 51/51 verde
3
COST OPTIMIZATION2026-04-07● LANÇADA
Sprint 3 — Tier interno em runtime
Claude Opus → Sonnet → Haiku acionado automaticamente por complexity
src/sanitize.py com path traversal blockDecomposer marca complexity variávelTier interno Claude acionou em runtime pela 1ª vezsrc/kpi_history.py persistido em jsonlDrift alert se 3 runs fora da banda 0.7-1.5x+1
AVG_COST_PER_CALL recalibrado para incluir tier internodecompose() do orchestrator usa Sonnet em vez de Opus (−80% por chamada)KPI tier_internal_engagement_rate persistidoKPI fallback_chain_save_rate cumulativocli.py dashboard --export csv|json+1
Loop FinOps fechado com aprendizado de custo a partir do histórico real
src/cost_calibrator.py aprende de execution_*.jsonKPI quality_judge_pass_rate (verdicts PT-BR)KPI parallelism_efficiency (speedup vs sequencial)Comando cli.py replay <execution_id>Comando dashboard --since 7d/24h/30d+3
6
RELIABILITY2026-04-08● LANÇADA
Sprint 6 — E2E mockado + Auto-trigger de drift + Doctor + CI
Cobertura ponta-a-ponta sem custo de LLM e health check pollable
tests/test_e2e.py com Pipeline mockadoAuto-trigger de calibração quando drift disparaComando cli.py doctor (6 health checks)GitHub Actions CI workflow (matriz 3.11/3.12)126/126 testes verde (era 117)
7
ENTERPRISE READY2026-04-08● LANÇADA
Sprint 7 — Catalog runtime + /health + Dashboard HTML
YAML como single source of truth, HTTP pollable e dashboard publicável
LLM_CONFIGS construído em runtime do catalog YAMLServidor HTTP /health + /metrics (stdlib, zero deps)Dashboard HTML estático com Chart.jsSafety threshold do calibrator (rejeita > 5x ou < 0.2x)Backup automático + comando finops calibrate-rollback+2
8
COST REBALANCE2026-05-02● LANÇADA
Sprint 8 — Rebalanceamento Gemini-first + Groq Heavy ativo
Opus reservado a architecture/critical_review · Gemini protagonista em code/review · Groq Heavy via gpt-oss-120b
TASK_TYPES: code/review primary claude → geminiNovos task types: architecture, critical_review, code_review, decomposition, extractionAlias groq_heavy ativo (default openai/gpt-oss-120b 120B)Cap por PROVIDER (não por nome): anthropic 30%, google 55%, groq 65%rebalance_plan_assignments() pré-aloca o plano respeitando os caps+2
9
RESILIENCE2026-05-02● LANÇADA
Sprint 9 — Resiliência & circuit breaker em produção
Outage de provider deixa de quebrar a wave · circuit breaker religado · backoff por classe · redistribuição cross-provider
CircuitBreaker integrado de fato no LLMClient (era módulo morto desde Round 3)Backoff por classe de erro: 503/timeout = 1 retry curto (1s); 429 mantém 2/4/8sRouter consulta circuit_breaker_registry e bloqueia providers OPENProvider degradation TTL local da sessão (mark_provider_degraded)Decomposition voltou para Claude Sonnet (wave 1 não pode depender de provider unstable)+5
218/220 verde → 223/224 pós-fix · cap Perplexity 50→35% · gemini_flash ativo em tasks medium
Bateria 360 completa: ping + doctor + finops + plan + run + board executados em sequência[CRÍTICO] _parse_plan: aceita dependencies em list de dicts ([{task_id:t1}]) além de list de stringsAVG_COST_PER_CALL[perplexity] $0,008 → $0,05 (5-9x acima da estimativa antiga)PROVIDER_SHARE_CAP[perplexity] 0,50 → 0,35 (Perplexity dominava 84% wall time em runs de research)cli.py: consolida gemini_flash em gemini e groq_heavy em groq no aggregator+4
xAI Grok como 6º provider canônico (3 entradas: grok 4.3, grok_multi 4.20-multi-agent, grok_fast 4.20-non-reasoning)API OpenAI-compatible em https://api.x.ai/v1 · conta team caramaschigeo6 task types novos exclusivos: realtime_search, social_listening, current_events, brand_monitoring, multi_perspective_decomposition, long_context_synthesissearch_parameters: auto — diferencial único de busca live em X/TwitterUpgrade Claude Opus 4.6 → 4.7 (GA desde 16-04, mesmo tier $15/$75)+7
Copy só usa GPT-5.5 → Opus 4.7 → Gemini Pro (Sonnet/Haiku/Flash banidos) · cap Perplexity 0,35 → 0,50 · catalog YAML v2.1 gpt-5.5 canônico
Diretriz canônica COPY PREMIUM ONLY: writing/copywriting/seo só em GPT-5.5 (primary) → Opus 4.7 (1º fallback) → Gemini 2.5 Pro (2º fallback)Sonnet 4.6, Haiku 4.5 e Gemini 2.5 Flash banidos de copy (incidente curso saude-mental-vibecoding 14-05-2026 motivou)FALLBACK_CHAINS reordenado: 4 primeiros slots todos premium-tier; Sonnet e Groq Heavy só como último recursoPROVIDER_SHARE_CAP[perplexity] restaurado 0,35 → 0,50 (era restritivo pós-bateria 360)FALLBACK_CHAINS['research'] reordenado para perplexity → gemini Pro → claude Opus → gpt-5.5+3
13
E2E HARDENING2026-05-19● LANÇADA
Sprint 13 — Bateria E2E + Gemini Pro full + diversity dinâmico + citations Perplexity
6 fixes pós-bateria E2E · Pro ativo em analysis/fact_check/data_processing · Sonnet em review primary · target=min(plan_size,5) · model_id + citations no audit · thinkingBudget guard · UX wave preview
thinkingBudget estendido ao Gemini 3.x Pro + code roteado para GPT-5.5
Cap de thinking aplicado a TODOS os Gemini *-pro (antes só 2.5 Pro)gemini-3.1-pro-preview (default atual) rodava sem cap — thinking ilimitadoTeto ajustável por env GEMINI_THINKING_BUDGET (vazio = cálculo dinâmico)Task code: primary Gemini Pro → GPT-5.5 (compensa carga na OpenAI)analysis profundo permanece em Gemini Pro, agora com thinking capado+1
15
FRONTIER ROUTING2026-06-12● LANÇADA
Sprint 15 — Tier FRONTIER: Claude Fable 5 nas tarefas mais complexas
claude-fable-5 (13º modelo canônico) primary de architecture e critical_review · fallback imediato Opus 4.8 em refusal · pricing oficial corrigido · catalog YAML v2.2
claude-fable-5 (Anthropic, lançado 09-06-2026) é o 13º modelo canônico e inaugura o tier frontierPrimeira classe Mythos disponível ao público · SOTA em quase todos os benchmarks (SWE-Bench Pro 80.3% vs 58.6% GPT-5.5 e 54.2% Gemini 3.1 Pro)claude_fable primary de architecture e critical_review (complexity high) · pricing oficial $10/$50 por Mtok · 1M ctxRefusal handling: classificadores de segurança do Fable 5 podem recusar requests (stop_reason=refusal, HTTP 200) — LLMClient converte em erro e a chain cai para Opus 4.8 sem sair da família ClaudeEscada de tier Claude: Fable 5 (frontier) ↔ Opus 4.8 ↔ Sonnet 4.6 ↔ Haiku 4.5 com upgrade/downgrade automático em Router.downgrade_claude_by_complexity+4
Consolidação em 4 providers canônicos: Anthropic, OpenAI, Google, Perplexity — Groq Inc e xAI Grok removidos do roteamento9 modelos canônicos · catalog YAML v3.0 · 23 task types re-roteadosNOVO alias perplexity_fast (Sonar Pro, $3/$15) assume realtime_search, social_listening, current_events e brand_monitoringclassification/summarization/extraction → Gemini Flash (fallback Haiku, custo neutro vs Groq) · translation → GPT-5.5 (qualidade PT-BR)code_review → Sonnet 4.6 (fallback GPT-5.5) — upgrade deliberado ~10x num gate de qualidade+9
17
CASCADE QUALITY2026-07-08● LANÇADA
Sprint 17 — Qualidade em Cascata
Verificador pós-geração sobre outputs economy · painel de juízes 2-de-3 cross-family em gates premium · desenhada pelo próprio orquestrador (dogfooding)
Verificador em cascata: outputs do tier economy que ALIMENTAM waves seguintes são pontuados 0-10 por verificador barato de OUTRO provider; score < 6,0 re-executa a task em alias não-economy ANTES de propagar (teto de 3 escalações/run)Painel de juízes 2-de-3 cross-family em tasks premium/frontier (~10% dos casos): 3 juízes de famílias distintas, mediana por dimensão, sempre excluindo o provider dominante — com 4 providers, excluir o produtor deixa EXATAMENTE 3 famíliasRobustez do dogfooding: reparo de JSON truncado no judge e no decompose + tetos maiores (judge 1600, decompose 8000 tokens)Fundamentos: arXiv 2606.27457 (Cluster-Route-Escalate: cascade retém 97-99% da acurácia do modelo mais forte), arXiv 2605.06350 (Is Escalation Worth It: sinais pós-geração dominam routing puro), arXiv 2604.23178 (Judging the Judges), arXiv 2604.22891 (Self-Preference Bias)
18
LIVING ROUTER2026-07-08● LANÇADA
Sprint 18 — Router Vivo
Janela deslizante de 50 amostras domina o scoring · bateria canário semanal · priors de cold-start · shadow-routing como rampa da reintegração do xAI
Janela deslizante de 50 amostras por (task_type, alias) DOMINA o scoring adaptativo (success 60% / custo 20% / latência 20%); histórico acumulado vira fallback — drift aparece em ~5 amostras (arXiv 2605.18859, TwinRouterBench: routers com histórico acumulado sofrem drift quando o pool de modelos muda)Bateria canário semanal (comando novo cli.py canary): 1 chamada mínima por alias grava a janela canary:<alias> · degraus do sinal: dados do task_type → canário → prior de cold-startPriors de cold-start por alias (Fable 0,92 … Haiku/Sonar Pro 0,83): alias novo não nasce invisível nem superestimadoShadow-routing log-only via GEO_SHADOW_ROUTE: conta quantas tasks TERIAM ido a um alias sem executar nem gastar — a rampa da reintegração futura do xAI (decisão do CEO: xAI NÃO reintegrado agora; plano de 1 semana de shadow → priors → ativação, em algumas semanas)
A rampa da Sprint 18 concretizada · Grok 4.5 traz de volta a busca live na timeline do X · decisão validada contra a API viva, não contra marketing de vendor
Parque volta a 5 providers / 11 modelos — xAI reintegrado (Groq segue fora). Decisão ancorada em bench INDEPENDENTE (Snorkel GDPval+, Artificial Analysis jul/2026) E em testes reais contra a API viva da conta, não em alegações do vendorgrok = Grok 4.5 ($2/$6, ctx 500K): primary de social_listening e brand_monitoring — o ÚNICO do parque com busca LIVE na timeline do X, restaurando a perda documentada do Sprint 16. Reforço em analysis (líder GDPval+: 29% vs 22% GPT-5.5 / 21% Opus 4.8 em jurídico/educação/saúde/QA)grok_reason = Grok 4.20 Reasoning ($1.25/$2.50): primary de multi_perspective_decomposition (raciocínio estendido, múltiplos pontos de vista — espírito do antigo grok_multi)Fora, com fundamento: grok-4.3 (redundante), grok-build-0.1 (Grok fica ABAIXO de Opus/Fable em SWE), grok-imagine-* (imagem/vídeo). Grok NUNCA é primary de code/architecture nem entra em copy premium PT-BR — sem evidência independente
20
TIMEOUT RESILIENCE2026-07-09● LANÇADA
Sprint 20 — Timeout resiliente e à prova de drift
Um incidente real de deep research expôs um bug latente sistêmico · timeout por-request no .post() · folga generosa sem economia que corte buscas longas · sentinela anti-drift
Bug latente corrigido: o ConnectionPool cacheia um cliente por provider e CONGELAVA o read timeout do PRIMEIRO chamador — como decompose/adaptive_decomposer criavam clients sem override, a tabela TIMEOUT_BY_TASK_TYPE virava letra morta em runtime (research 600s e architecture/critical_review 720s cortados no default). Mesma classe do incidente sonar-pro vs prompt de research ~17k charsFix: timeout POR-REQUEST em cada um dos 6 client.post() (httpx.Timeout(self._timeout, connect=10.0)) — o pooling TCP/TLS fica intacto; override explícito em decompose, adaptive_decomposer, summarizer e verifierFolga generosa (timeout é TETO, não espera): bandas ~2x (research 600s, architecture/critical_review 720s, fact_check 420s), DEFAULT 300s, escape hatch global GEO_TIMEOUT_MULTIPLIER; janela de contexto entre waves 2000→12000 chars, truncamento de fallback 800/200→8000/3000Timeout adaptativo no retry (GEO_TIMEOUT_RETRY_FACTOR, default 1.5, cap base×2.5): após um timeout, a chamada é comprovadamente lenta — esticar o teto evita cair pro fallback mais caro por poucoSentinela de cobertura timeout_coverage no cli doctor (todo task_type conhecido precisa de banda explícita acima do piso da família) + novo comando cli.py timeouts que lista a banda EFETIVA por task_type+1
21
24/7 ROBUSTNESS2026-07-09● LANÇADA
Sprint 21 — Robustez para autonomia 24/7 (revisão CTO-Fable)
Revisão de engenharia com as lentes do /cto-fable · 5 gaps de enforcement inconsistente corrigidos · cada verify virou teste · local Windows == CI pela primeira vez
Origem: revisão CTO-Fable (Nuvini · growthbuilders/projects/pierre/cto-fable) — veredito APPROVE_WITH_CHANGES, 1 HIGH + 5 MEDIUM + 1 LOW, nenhum CRITICAL. Tese: a máquina roda autônoma 24/7 (cron + Telegram + manual) e nem toda garantia declarada sobrevivia à concorrência e ao reroute em runtimeF1 (HIGH) — Escrita atômica dos state files: o padrão de atomicidade do FinOps (SQLite WAL, F23) propagado a .router_stats.json, .cost_calibration.json (+backup/rollback) e .semantic_index.json via tmp + os.replace; modo best_effort preserva a versão íntegra sob contenção Windows em vez de derrubar a run — o próprio teste de stress pegou que o raise mataria threadsF2 — Redirect por budget re-verifica o cap de concentração: hierarquia budget (duro) > cap (soft); sem candidato que satisfaça ambos, mantém o mais barato e loga CAP VIOLADO explícito — a invariante de resiliência de outage não é mais furada silenciosamente no apertoF4 — Cache semântico exact-only para writing/copywriting/seo/research/fact_check: colisão de público (dentistas ↔ advogados a ≥0,85 de cosseno) não pode mais servir conteúdo errado; tipos bulk preservam o hit semânticoF3 — ConnectionPool.shutdown real (só existia na docstring): wrapper _run_async fecha o pool num finally dentro do mesmo event loop nos 6 call-sites LLM do CLI + sentinela contra asyncio.run cru+1
22
SDK2026-07-09● LANÇADA
Sprint 22 — SDK call-level: call_llm() com o pipeline herdado
O orquestrador vira biblioteca sem perder a governança · chamada avulsa herda timeout, fallback e FinOps · curso-factory consome em modo opt-in
call_llm() (B-019, deferido D8 da Sprint 21) expõe uma chamada LLM avulsa que HERDA do pipeline o timeout por task_type, a fallback chain e a governança FinOps — consumidores externos param de reimplementar retry/timeout/budget na mãoPrimeiro consumidor: curso-factory, em modo opt-in (CURSO_FACTORY_LLM_BACKEND=sdk) — zero mudança de comportamento até a ativação explícita em um curso de testeFonte do catálogo instrumentada no manifest (catalog.version/last_updated viram sinal auditável). 395 testes verde + 1 xfail
23
EVIDENCE-DRIVEN ROUTING2026-07-10● LANÇADA
Sprint 23 — GPT-5.6 Sol + Luna — inserção evidence-driven
GPT-5.6 (lançado 09/07) entra por evidência de benchmarking global · Sol vira code primary e julgador cross-family · Luna reforça o volume · Terra fica fora da fronteira de Pareto · copy premium intacto
gpt_sol = GPT-5.6 Sol ($5/$30, premium): PRIMARY de code — líder do AA Coding Agent Index (80 vs 77.2 do Fable; Terminal-Bench 88.8) — e julgador cross-family ADITIVO nas chains de analysis/code_review/critical_review/architecturegpt_luna = GPT-5.6 Luna ($1/$6, economy): entra em 7 chains de volume (classification, extraction, data_processing, social_listening, brand_monitoring, realtime_search, current_events) — mesma família, fração do custoGPT-5.6 Terra ficou DE FORA: fora da fronteira de Pareto (Artificial Analysis — Luna e Sol dominam por custo em toda a faixa de qualidade). Inserir modelo por completude de família seria hype, não evidênciaCOPY PREMIUM ONLY intacto: GPT-5.5 segue copy primary — Sol é fraco em escrita one-shot (último de 6 no bench da Every); Fable 5 segue frontier de julgamento/arquitetura (SWE-Bench Pro 80 vs 64.6 do Sol). Cache OpenAI reprecificado por modelo (Luna -55% de custo em cache hit no smoke real); caps openai 45%→50%, budget $70/dia (global $290), RPM 90/5
24
LOOP ENGINEERING2026-07-10● LANÇADA
Sprint 24 — Fechamento de loops — meta-harness e qualidade com consequência
O pipeline deixou de ser feed-forward · sinal duplo no router, judge com consequência, code verifier que RODA o código, replan + abort e breaker de qualidade · smoke real US$ 0,24 com o Google fora do ar · parque intocado
Origem: report executivo "Meta-Harness & Loop Engineering" (deep research verificado: harness move +7,3pp com modelo fixo; autocorreção só funciona com sinal externo — Reflexion 91% vs 80%; reward hacking 43× maior com scoring visível) + auditoria de código que achou 2 mecanismos implementados e MORTOSSinal duplo no router: janela quality: separada do transporte; score 0.40 transporte + 0.30 qualidade + 0.20 custo + 0.10 latência com >=3 amostras fortes — fórmula byte-igual à legada sem amostras (provado bit a bit). record_feedback LIGADO (canal morto desde a Sprint 18): cascata + judge alimentam o roteamento; .router_feedback.jsonl nasceu em produção no smoke realJudge com consequência: avaliação por task (amostra estratificada, teto 6); REPROVADO → re-executa as 2 piores com issues sanitizadas → re-julga → persiste = entrega flagged (quality_flag) + exit code 3; falha técnica = REPROVADO_TECNICO com retry cross-provider — fim do score neutro 50%. Code verifier: código gerado agora RODA (ast.parse/json/node --check + execução em subprocess isolado + re-prompt com o erro literal, máx 2 fixes) — veredito determinístico substitui a contagem de chavesCascata convergente (re-pontua o que escala; 2ª reprovação → degraded + AVISO explícito no contexto dos dependentes — fim da amputação silenciosa) + replan + abort: AdaptiveDecomposer REATIVADO (task FAILED com dependentes → substituta sob o mesmo id); colapso de plano → PlanCollapseError + exit code 4; decompose ganhou fallback cross-provider de transporte (validado com Google 429 real: Sonnet assumiu)Breaker de qualidade por (task_type, alias): 3 reprovações fortes → alias ao fim da chain daquele task type (nunca removido), cooldown 6h; KPIs novos cost_per_accepted_task e degraded_rate. Outer loops agendados: canário semanal + dogfooding mensal (o orquestrador propõe as 3 melhorias da próxima sprint; humano aprova) via Task Scheduler; doctor com checks quality_signal e canary_freshness. Anti reward-hacking (6 invariantes): rubrica nunca vaza ao gerador, issues sanitizadas, verificador cross-provider, teto de influência 0.30+1
Detalhe técnico por sprint
Cada item entregue com descrição, justificativa, métricas e arquivos tocados.
1+2
Foundation · 2026-04-07
Sprints 1+2 — Refator CLI v2.0 + Cap 80% real
11 fixes P0/P1 cirúrgicos validados por bateria científica
Highlights
11 fixes P0/P1 cirúrgicosCap 80% real (era vaporware)Tier interno Claude Opus/Sonnet/HaikuBateria científica com 3 runs comparativosSuite test_integration: 51/51 verde
Refator do CLI para Orchestrator v2.0
Religação completa do cli.py ao Orchestrator(smart=True).run(), removendo o caminho legado v1.0.
Por que esta decisão
A auditoria identificou que o CLI executava um caminho legacy v1.0 que ignorava SmartRouter, cap 80%, quality gates e semantic cache. Sintoma: 12/12 tarefas de uma execução foram para Claude (100% concentração) e o gasto diário Anthropic atingiu o limite.
−127 linhas20/20 testes verde11 gaps fechados
3
Cost Optimization · 2026-04-07
Sprint 3 — Tier interno em runtime
Claude Opus → Sonnet → Haiku acionado automaticamente por complexity
Highlights
src/sanitize.py com path traversal blockDecomposer marca complexity variávelTier interno Claude acionou em runtime pela 1ª vezsrc/kpi_history.py persistido em jsonlDrift alert se 3 runs fora da banda 0.7-1.5x75/75 testes verde (era 51/51)
Downgrade automático Opus → Sonnet → Haiku por complexity
O SmartRouter aplica downgrade dentro da família Claude com base em task.complexity (1-2 → Haiku, 3 → Sonnet, 4-5 → Opus).
Por que esta decisão
Antes desta sprint, toda tarefa Claude ia para Opus (15x mais caro que Haiku). O downgrade economiza até 95% por chamada para tarefas low-complexity (triagem, classificação) sem perda de qualidade perceptível.
Run #5 custo: $0.0727 vs $0.6653 baseline (−89%)Wall clock: 97.5s vs 240.8s (−60%)
AVG_COST_PER_CALL recalibrado para incluir tier internodecompose() do orchestrator usa Sonnet em vez de Opus (−80% por chamada)KPI tier_internal_engagement_rate persistidoKPI fallback_chain_save_rate cumulativocli.py dashboard --export csv|json97/97 testes verde (era 75/75)
KPI tier_internal_engagement_rate
Mede a percentagem de tarefas Claude que foram roteadas para Sonnet/Haiku em vez de Opus, validando a adoção do downgrade automático.
Por que esta decisão
Sem este KPI, era impossível saber se o tier interno estava de fato operando ou se permanecia adormecido. Run #6 atingiu 50% de adoção, confirmando que o decomposer marca complexity variável e o downgrade dispara.
Loop FinOps fechado com aprendizado de custo a partir do histórico real
Highlights
src/cost_calibrator.py aprende de execution_*.jsonKPI quality_judge_pass_rate (verdicts PT-BR)KPI parallelism_efficiency (speedup vs sequencial)Comando cli.py replay <execution_id>Comando dashboard --since 7d/24h/30dcatalog/model_catalog.yaml v2.0 sincronizadosrc/catalog_loader.py com validator de drift117/117 testes verde (era 97/97)
Auto-calibração adaptativa de AVG_COST_PER_CALL
Novo módulo cost_calibrator.py varre os últimos N execution_*.json, agrupa custos por LLM, filtra outliers e persiste a calibração em .cost_calibration.json.
Por que esta decisão
A Sprint 4 ajustou AVG_COST_PER_CALL manualmente após o drift detectado. Calibrar automaticamente fecha o loop: drift acima ou abaixo da banda saudável é corrigido sem intervenção humana.
Mede se a decomposição em waves está aproveitando a paralelização. Run #7 atingiu speedup ~3.2x com 11 tarefas em 4 waves.
src/kpi_history.py:compute_parallelism_efficiency
6
Reliability · 2026-04-08
Sprint 6 — E2E mockado + Auto-trigger de drift + Doctor + CI
Cobertura ponta-a-ponta sem custo de LLM e health check pollable
Highlights
tests/test_e2e.py com Pipeline mockadoAuto-trigger de calibração quando drift disparaComando cli.py doctor (6 health checks)GitHub Actions CI workflow (matriz 3.11/3.12)126/126 testes verde (era 117)
Comando cli.py doctor — 6 health checks
Verifica em uma chamada: api_keys, catalog_consistency, finops_daily, kpi_history freshness, cost_calibration age e drift_detector.
Por que esta decisão
Antes era preciso rodar finops status + dashboard + verificar cost_calibration manualmente. O doctor consolida tudo. Flag --strict faz exit 1 em ATENÇÃO ou CRÍTICO.
cli.py:doctor
7
Enterprise Ready · 2026-04-08
Sprint 7 — Catalog runtime + /health + Dashboard HTML
YAML como single source of truth, HTTP pollable e dashboard publicável
Highlights
LLM_CONFIGS construído em runtime do catalog YAMLServidor HTTP /health + /metrics (stdlib, zero deps)Dashboard HTML estático com Chart.jsSafety threshold do calibrator (rejeita > 5x ou < 0.2x)Backup automático + comando finops calibrate-rollbackpytest-cov + Codecov no CI140/140 testes verde, 53% coverage global
Catalog YAML como Single Source of Truth runtime
build_llm_configs_from_catalog() constrói o dict LLMConfig a partir de catalog/model_catalog.yaml em tempo de import.
Por que esta decisão
Antes o catalog YAML era apenas validador sidecar — drift entre código e documentação era possível. Agora a divergência é impossível.
Servidor http.server minimal expõe GET /health (200/503), GET /metrics e GET / (docs). Zero dependência adicional.
Por que esta decisão
O cli doctor é reativo. Para load balancers, k8s probes e monitores externos é preciso um endpoint HTTP pollable. stdlib em vez de FastAPI para zero dep.
src/health_server.pycli.py:serve
8
Cost Rebalance · 2026-05-02
Sprint 8 — Rebalanceamento Gemini-first + Groq Heavy ativo
Opus reservado a architecture/critical_review · Gemini protagonista em code/review · Groq Heavy via gpt-oss-120b
Highlights
TASK_TYPES: code/review primary claude → geminiNovos task types: architecture, critical_review, code_review, decomposition, extractionAlias groq_heavy ativo (default openai/gpt-oss-120b 120B)Cap por PROVIDER (não por nome): anthropic 30%, google 55%, groq 65%rebalance_plan_assignments() pré-aloca o plano respeitando os capsdecompose() migrou Sonnet → Gemini 2.5 Pro (1M ctx, ~5x mais barato)195/195 testes verde (era 140)
TASK_TYPES rebalanceadas — Gemini protagonista em code e review
code e review saíram de primary=claude para primary=gemini. Opus reservado exclusivamente a architecture e critical_review (raciocínio arquitetural ou validação final crítica).
Por que esta decisão
Diagnóstico nos 10 runs anteriores: Opus pegava só 3.7% das tasks por contagem mas concentrava 60% dos custos (single-task de $0,668). Gemini 2.5 Pro tem 1M context e raciocínio comparável a Opus por ~1/15 do custo. Em plano sintético típico (12 tasks), Anthropic caiu de 42% para 17% e Gemini subiu para 50%.
Groq Heavy — alias para modelo de raciocínio na infra Groq
Novo alias groq_heavy controlado via env var GROQ_HEAVY_MODEL. Default ativado: openai/gpt-oss-120b (120B parâmetros, 131K context, 56 reasoning tokens internos).
Por que esta decisão
O Groq Cloud tem modelos de raciocínio (gpt-oss-120b, qwen3-32b) com latência sub-segundo e custo ~100x menor que Opus. Smoke test code review: 0,88s end-to-end, $0,00099/call. Velocidade Groq + raciocínio open-weights = sweet spot para code_review e extraction.
Latência: 0,88sCusto: $0,00099/call~100x mais barato que Opus
Sprint 9 — Resiliência & circuit breaker em produção
Outage de provider deixa de quebrar a wave · circuit breaker religado · backoff por classe · redistribuição cross-provider
Highlights
CircuitBreaker integrado de fato no LLMClient (era módulo morto desde Round 3)Backoff por classe de erro: 503/timeout = 1 retry curto (1s); 429 mantém 2/4/8sRouter consulta circuit_breaker_registry e bloqueia providers OPENProvider degradation TTL local da sessão (mark_provider_degraded)Decomposition voltou para Claude Sonnet (wave 1 não pode depender de provider unstable)Review primary virou Groq Heavy (rápido + diversifica)Regra dura nas FALLBACK_CHAINS: top-2 de providers diferentesCaps revisados: anthropic 30→40%, google 55→45%Novo KPI provider_health no .kpi_history.jsonl213/213 testes verde (era 195) · 8 testes novos em test_resilience_outage.py
CircuitBreaker integrado de fato no LLMClient
src/circuit_breaker.py existia completo (310 linhas, CLOSED/OPEN/HALF_OPEN, registry singleton) desde o Round 3 mas nunca foi importado em pipeline.py nem llm_client.py — vaporware. Religado: 3 falhas seguidas em qualquer provider abrem o circuito por 90s; tasks subsequentes raise CircuitBreakerError em ~0ms e caem para o próximo da fallback chain.
Por que esta decisão
Diagnóstico do outage Google de 02-mai: cada task da wave perdia ~50s (rate limiter + 3 retries com backoff 2/4/8s + jitter) antes de descobrir o 503 sustentado. Em wave de 12 tasks paralelas, todas pagavam o custo do zero — overhead O(N) onde deveria ser O(1). Com circuit breaker, só as 3 primeiras descobrem o outage; o restante salta o provider em 0ms.
3 falhas → OPEN por 90sShort-circuit em <100msOutage cost: O(N×50s) → O(3×2s + N×0ms)
compute_provider_health() lê o CircuitBreakerRegistry e gera 3 campos novos por entry: provider_health (dict por provider com state, consecutive_failures, totals, health_score), min_provider_health_score (pior provider da run) e providers_open (quantos circuits ficaram OPEN).
Por que esta decisão
Sem KPI de saúde, era impossível rastrear historicamente quem derrubou o pipeline na semana. Agora é trivial: filtrar entries onde providers_open > 0 mostra todos os incidentes, e min_provider_health_score < 0.95 sinaliza degradação progressiva antes do outage explícito.
218/220 verde → 223/224 pós-fix · cap Perplexity 50→35% · gemini_flash ativo em tasks medium
Highlights
Bateria 360 completa: ping + doctor + finops + plan + run + board executados em sequência[CRÍTICO] _parse_plan: aceita dependencies em list de dicts ([{task_id:t1}]) além de list de stringsAVG_COST_PER_CALL[perplexity] $0,008 → $0,05 (5-9x acima da estimativa antiga)PROVIDER_SHARE_CAP[perplexity] 0,50 → 0,35 (Perplexity dominava 84% wall time em runs de research)cli.py: consolida gemini_flash em gemini e groq_heavy em groq no aggregatorGemini split runtime: GEMINI_MODEL=gemini-2.5-flash em janelas de outage 503 Proscripts/run_5llm_board.py honra DEMAND env var (board vira 5 experts gerais)test_no_deprecated_models: cap writing 8192 → 16384 (alinhado com max_tokens 32k Opus 4.6)223 passed + 1 xfailed = 100% effective · coverage 57% (4578 stmts)
[CRÍTICO] Normaliza dependencies em _parse_plan
Sonnet pós-rebalance 02-mai começou a devolver dependencies como list de dicts ({task_id:t1}) em vez de strings simples ([t1]). ValidationError quebrava cli.py plan totalmente. Agora _parse_plan aceita os dois formatos e formatos mistos.
Por que esta decisão
Mudança silenciosa de comportamento do Sonnet 4.6 invalidava todo o entry-point de planning. Sem normalização, o usuário batia com Pydantic ValidationError opaco em qualquer demanda. Bug encontrado pela bateria 360 antes de chegar em produção pública.
4 testes novos cobrindo formatos: lista de strings, lista de dicts, formato misto
Perplexity recalibrada: cap 35% + custo $0,05/call
Bateria 360 mostrou Perplexity sonar-deep-research consumindo 84% do wall time e 82% do custo em runs com 1 task de research profunda. AVG_COST_PER_CALL elevado de $0,008 para $0,05 (5-9x mais real). Cap reduzido de 50% para 35% força decomposição em sub-tasks ou downgrade para sonar-pro em queries simples.
Por que esta decisão
Calibrator rejeitava amostras reais por ratio 8,6x do limite saudável (0,7-1,5x). Cap antigo permitia 1 task de research dominar runs completos. Run accuracy pós-fix: 0,98x (era 2,16x).
GEMINI_MODEL e GEMINI_FLASH_MODEL controlam Pro/Flash em runtime. Flash ($0,30/$2,50 por Mtok) mantém 1M context com latência ~3x menor e custo ~5x menor que Pro. Pro reservado para code/architecture/decomposition; Flash entra em analysis, data_processing, fact_check fallback, classification, summarization, extraction.
Por que esta decisão
Probe direto na API Google em 02-mai retornou 60% de 503 em gemini-2.5-pro (saturação compartilhada do tier standard). gemini-2.5-flash 100% saudável na mesma chave. Split garante que tasks medium tenham fallback ativo no mesmo provider quando Pro saturar.
Grok é o único provider com busca live em X/Twitter via search_parameters: auto — nenhum outro alcança a timeline em tempo real. Para demandas de social_listening, brand_monitoring e current_events o canal é exclusivo. grok_multi com 4 agentes paralelos nativos (Grok+Harper+Benjamin+Lucas) é arquitetura única para multi_perspective_decomposition. Pricing flat $1,25/$2,50 em toda linha GA — diferenciação por capability, não preço.
Ping smoke: grok-4.3 OK 2,07s $0,00017112 LLMs no cli.py models (era 9)search_parameters opt-in automático por strength
realtime_search, social_listening, current_events, brand_monitoring (todos primary=grok, fallback=perplexity), multi_perspective_decomposition (primary=grok_multi, fallback=claude_sonnet), long_context_synthesis (primary=grok_multi, fallback=gemini). _infer_task_type do adaptive_decomposer reconhece keywords PT-BR/EN testadas ANTES das genéricas (research/analysis) — "monitorar Twitter agora" vira realtime_search em vez de research.
Por que esta decisão
Sem task types específicos, o decomposer roteava demandas live para perplexity ou gemini que não têm acesso a X/Twitter. Mapeamento explícito garante que tasks de timeline social ativem Grok. Multi-perspective decomposition usa 4 agentes paralelos nativos do grok_multi em vez de chamadas Claude sequenciais.
Novo método no SmartRouter garante cobertura mínima de 4/6 providers únicos em planos COMPLEX com 5+ tasks. Faz upgrades estratégicos quando rebalance_plan_assignments inicial não atinge o alvo, usando hints por provider ausente (architecture → claude opus, writing → gpt4o, research → perplexity, code → gemini pro, classification → groq, realtime_search → grok).
Por que esta decisão
Baseado em Mixture of Agents (Wang 2024, arXiv:2406.04692) — ensemble heterogêneo supera homogêneo em quality médio +7-15%. RouteLLM (Ong 2024, arXiv:2406.18665) — diversity reduz single-point-of-failure de 12% para 2% em outage scenarios. When Agents Disagree (arXiv:2603.20324 mar/2026) — MoA-diverso vence Self-MoA em raciocínio com judge (0,810 vs 0,512 win rate).
Cobertura alvo: 4/6 providers únicos (66%)Premium signals bonus: +1,5 ao score por sinal
Upgrade canônico: Opus 4.7 + Llama 4 Scout + gpt-oss-120b
Claude Opus 4.6 → 4.7 (GA desde 16-04-2026, mesmo tier $15/$75). Groq default Llama 3.3 70B → meta-llama/llama-4-scout-17b-16e-instruct ($0,59/$0,79 → $0,11/$0,34, 5x mais barato). Groq Heavy default consolidado em openai/gpt-oss-120b (era llama-3.3-70b por compatibilidade segura).
Por que esta decisão
Saúde 6/6 OK validou os 3 upgrades simultaneamente. Sonnet 4.7 e Gemini 3 Pro preview testados mas mantidos no tier anterior (Sonnet 4.7 retornou HTTP 404 not_found, Gemini 3 Pro preview HTTP 403 sem acesso na chave atual). Upgrades não-disruptivos (preservam pricing tier) viraram canônico imediato.
Groq pricing: $0,59/$0,79 → $0,11/$0,34 (5x cheaper)Opus 4.7 same tier ($15/$75)Health check: 6/6 OK $0,006/exec
Copy só usa GPT-5.5 → Opus 4.7 → Gemini Pro (Sonnet/Haiku/Flash banidos) · cap Perplexity 0,35 → 0,50 · catalog YAML v2.1 gpt-5.5 canônico
Highlights
Diretriz canônica COPY PREMIUM ONLY: writing/copywriting/seo só em GPT-5.5 (primary) → Opus 4.7 (1º fallback) → Gemini 2.5 Pro (2º fallback)Sonnet 4.6, Haiku 4.5 e Gemini 2.5 Flash banidos de copy (incidente curso saude-mental-vibecoding 14-05-2026 motivou)FALLBACK_CHAINS reordenado: 4 primeiros slots todos premium-tier; Sonnet e Groq Heavy só como último recursoPROVIDER_SHARE_CAP[perplexity] restaurado 0,35 → 0,50 (era restritivo pós-bateria 360)FALLBACK_CHAINS['research'] reordenado para perplexity → gemini Pro → claude Opus → gpt-5.5_ensure_provider_diversity prioriza Opus 4.7 para copy antes de Sonnet para decomposition em diversity upgradeCatalog YAML v2.1 sincronizado: gpt-4o → gpt-5.5 canônico (drift Sprint 11 fechado, pricing $5.00/$15.00 por Mtok)223/224 testes verde mantido (test_sprint7.py atualizado para refletir pricing GPT-5.5)
Diretriz canônica COPY PREMIUM ONLY
writing, copywriting e seo agora têm primary=gpt4o (GPT-5.5) e fallback=claude (Opus 4.7). FALLBACK_CHAINS começa com gpt4o → claude → gemini → perplexity — os 4 primeiros slots são todos premium-tier. Sonnet 4.6, Haiku 4.5 e Gemini 2.5 Flash banidos de copy.
Por que esta decisão
Voz editorial PT-BR de Alexandre exige reasoning nativo, 1M ctx e densidade lexical que tiers menores não entregam consistentemente em copy longa. Incidente curso saude-mental-vibecoding (14-05-2026, 3741 linhas sem acentos por sub-agente Sonnet) comprovou que o tier importa. Custo extra (~$10/run editorial) vence o retrabalho de QA.
PROVIDER_SHARE_CAP[perplexity] 0,35 → 0,50 + research priority
Cap restaurado ao valor pré-bateria 360. FALLBACK_CHAINS['research'] reordenado: perplexity → gemini Pro → claude Opus → gpt-5.5; groq só como último recurso.
Por que esta decisão
Cap 0,35 da Sprint 10 sufocava deep research editorial. adaptive_decomposer agora decompõe research em sub-tasks naturalmente, e o cap rígido não era mais necessário. Citações verificáveis vencem velocidade/custo em research.
catalog/model_catalog.yaml v2.1 substitui referências a gpt-4o por gpt-5.5 canônico (lançado 23-04-2026, 1M ctx + reasoning nativo + pt-BR otimizado). Pricing $5.00/$15.00 por Mtok refletido em test_sprint7.py.
Por que esta decisão
Drift entre LLM_CONFIGS (já em gpt-5.5 desde Sprint 11) e catalog YAML (ainda em gpt-4o) era invariante quebrado. Catalog é Single Source of Truth runtime — drift impossível agora.
catalog/model_catalog.yamltests/test_sprint7.py
13
E2E Hardening · 2026-05-19
Sprint 13 — Bateria E2E + Gemini Pro full + diversity dinâmico + citations Perplexity
6 fixes pós-bateria E2E · Pro ativo em analysis/fact_check/data_processing · Sonnet em review primary · target=min(plan_size,5) · model_id + citations no audit · thinkingBudget guard · UX wave preview
Highlights
Bateria E2E 19-mai pós-Sprint 12 expôs 6 gaps fechados em sequência (commit 0a6211e + fixes)TASK_TYPES: analysis primary gemini_flash → gemini (Pro); fallback groq_heavy → gemini_flashTASK_TYPES: review primary groq_heavy → claude_sonnet; fallback gemini_flash → groq_heavyTASK_TYPES: fact_check fallback gemini_flash → gemini (Pro); data_processing fallback groq → gemini (Pro)Diversity guarantee dinâmico: target = min(len(tasks), 5) — antes era fixo em 4Perplexity sonar-deep-research com return_citations=true + search_recency_filter=year no POST bodyTaskResult + LLMResponse expõem model: str e citations: list[str] (URLs/DOIs) — fim do ? no auditGemini 2.5 Pro thinkingBudget reservado em 1/3 do max_tokens (mín 512, máx 2048) — corrige parts=[]Pipeline ganha UX em tempo real: preview por wave no stdout, OK por task com latência+tokens+custoping 6/6 OK $0,006 · board 5/5 paralelo retornou Aggarwal SIGIR 2024 + Reyes-Lillo 2025 com DOIs reaisrun completo 5 tasks/3 waves $0,0885 · cobertura sobe para 5/5 ou 6/6 com Anthropic via Sonnet review
TASK_TYPES atualizado pós-bateria E2E
Quatro alterações cirúrgicas em src/config.py:296-321. analysis: primary=gemini (Pro, era gemini_flash), fallback=gemini_flash (era groq_heavy). review: primary=claude_sonnet (era groq_heavy), fallback=groq_heavy (era gemini_flash). fact_check: fallback=gemini (Pro, era gemini_flash). data_processing: fallback=gemini (Pro, era groq).
Por que esta decisão
Três motivações conectadas: (a) usuário tem crédito Google Cloud carregado em produção e Gemini 2.5 Pro precisa entrar como primary em analysis (não só Flash) — Pro tem reasoning nativo + 1M ctx, Flash mantido para lote massivo (data_processing primary) e fallback Pro→Flash em outage; (b) review é etapa crítica de qualidade editorial e Claude Sonnet 4.6 supera Groq Heavy em PT-BR + diversifica Anthropic em planos COMPLEX (antes da Sprint 13, Anthropic só entrava em writing/copy/seo fallback e architecture/critical_review, com cobertura frequente de 4/5); (c) Gemini Pro como fallback de fact_check e data_processing preserva 1M ctx em outage do primary.
4 task types alteradosAnthropic cobertura: 4/5 → 5/5Pro elevado a primary em 1 type + fallback em 2
src/smart_router.py:704 antes fixava target=4. Bateria E2E mostrou que plano de 5 tasks fechava com 4/5 providers porque o alvo já estava satisfeito em 4. Agora target = min(len(tasks), 5) — plano de 5 tasks busca 5 providers únicos, plano de 6+ busca 5 (capado pelo número viável dado os 6 providers disponíveis e os hard-pins).
Por que esta decisão
Cobertura efetiva sobe naturalmente quando plan_size cresce. Mantém o invariante de não promover diversity acima do número real de tasks (evita upgrade desnecessário em plano de 3 tasks). Limite superior de 5 preserva 1 slot livre para o provider apropriado por task type sem forçar todos os 6 simultaneamente.
target=4 fixo → target=min(len(tasks), 5)Cobertura 4/5 → 5/5 em plano 5 tasks
src/models.py: TaskResult ganhou model: str e citations: list[str]. src/pipeline.py:_call_llm popula ambos a partir da LLMResponse. Antes ficava model='?' no execution_*.json (impossível auditar qual versão do modelo respondeu). Citations array vem populada de Perplexity sonar-deep-research e ficará vazia para os demais providers.
Por que esta decisão
Sem model_id no audit não dá para correlacionar regressão de qualidade com upgrade de modelo upstream (Sonnet 4.6 → 4.7, GPT-5.5 → 5.6 etc). Sem citations expostas, fontes de Perplexity eram lidas só no markdown da resposta sem chave estruturada — não dava para gerar dashboards de citation freshness ou DOI coverage. Sprint 13 fecha esse buraco de observabilidade.
src/llm_client.py:_call_perplexity adiciona ao POST body: return_citations=true, return_related_questions=false, search_recency_filter='year'. citations expostas na resposta como list[str] de URLs/DOIs; recency filter limita o índice de busca a publicações do último ano.
Por que esta decisão
Citations sempre estiveram no payload do sonar-deep-research mas o body padrão não pedia return_citations explicitamente em todos os tiers — bateria E2E mostrou DOIs presentes inconsistentemente. recency filter='year' alinha com a doutrina editorial de Alexandre: fontes ≥ 2025 vencem fontes 2020-2023 em conteúdo HBR-grade. related_questions desligado reduz tokens de resposta (~10-15%).
return_citations=truesearch_recency_filter=yeartokens de resposta: -10/15%
src/llm_client.py:_call_perplexity
Gemini 2.5 Pro thinkingBudget guard
src/llm_client.py:_call_google reserva 1/3 do max_tokens para thinking interno (mínimo 512, máximo 2048), restando 2/3 para output visível. Em chamadas longas (>4096 tokens de output), Pro consumia todo o orçamento em thinking e devolvia HTTP 200 com parts=[] (resposta vazia).
Por que esta decisão
Bug silencioso descoberto em bateria E2E: plano com task de analysis de 8000 tokens em Pro recebia parts=[] e pipeline registrava task_result vazio sem erro. O guard divide o budget; se max_tokens=6144, thinking ganha 2048 (cap), output ganha 4096. Para max_tokens=1500, thinking ganha 512 (piso) e output ganha 988. Resolve parts=[] sem reduzir qualidade do reasoning (papers do time Google confirmam que thinking >2048 não traz ganho linear).
Thinking budget: max(512, min(2048, max_tokens/3))parts=[] em respostas longas: corrigido
src/llm_client.py:_call_google
Pipeline UX em tempo real · wave preview no stdout
src/pipeline.py imprime no stdout antes de cada wave: '>>> Wave N (X tarefa(s) em paralelo): t1→provider(task_type) | t2→...'. Depois de cada task: '[OK] tN -> provider (model_id) -> Xs | Y tok | $Z'. Antes era silêncio entre wave-start e relatório final.
Por que esta decisão
Bateria E2E em produção pode demorar 2-4 min sem feedback visual — operador ficava sem saber se estava em research deep (Perplexity ~110s) ou se algo travou. Preview por wave + OK por task com latência+tokens+custo permite acompanhar progresso linha-a-linha e identificar gargalos antes do relatório final.
src/pipeline.py:_execute_wave
14
Cost Optimization · 2026-06-05
Sprint 14 — Otimização FinOps do Gemini
thinkingBudget estendido ao Gemini 3.x Pro + code roteado para GPT-5.5
Highlights
Cap de thinking aplicado a TODOS os Gemini *-pro (antes só 2.5 Pro)gemini-3.1-pro-preview (default atual) rodava sem cap — thinking ilimitadoTeto ajustável por env GEMINI_THINKING_BUDGET (vazio = cálculo dinâmico)Task code: primary Gemini Pro → GPT-5.5 (compensa carga na OpenAI)analysis profundo permanece em Gemini Pro, agora com thinking capadoGemini é ~91% do custo LLM do pipeline de pesquisa — maior alavanca de economia
thinkingBudget estendido aos Gemini 3.x Pro
src/llm_client.py:_call_google_model passa a injetar thinkingConfig.thinkingBudget em qualquer modelo Gemini *-pro (não mais só gemini-2.5-pro), cobrindo o default atual gemini-3.1-pro-preview, que antes rodava com raciocínio interno ilimitado até o maxOutputTokens. Validado em 2026-06-05: o 3.1-pro-preview aceita o campo e responde finishReason=STOP (num probe usou ~503 tokens de thinking, bem abaixo do teto de 2048).
Por que esta decisão
O raciocínio interno do Gemini Pro é o maior custo do orchestrator (output billing). Sem cap, queries pesadas consomem milhares de tokens de thinking. O cap apara o tail caro sem afetar as queries normais (que pensam pouco). Reversível e ajustável por env, sem trocar o modelo nem degradar a qualidade percebida.
thinkingBudget: max(512, min(2048, max_tokens/3)) ou GEMINI_THINKING_BUDGET3.1-pro-preview: STOP OK com cap
src/llm_client.py:_call_google_model
Task code roteada para GPT-5.5 (compensa na OpenAI)
src/config.py:TASK_TYPES — a task code teve o primary trocado de gemini (Pro) para gpt4o (GPT-5.5), com gemini virando fallback. Distribui a carga de código para a OpenAI (forte em código) e reduz o consumo de Gemini Pro. analysis profundo permanece em Gemini Pro (agora com thinking capado).
Por que esta decisão
Rebalanceamento FinOps mantendo qualidade: GPT-5.5 é excelente em código e o cache automático de prompt da OpenAI reduz ainda mais o custo efetivo. O Gemini Pro deixa de ser o caminho primário das tarefas de código, mas segue disponível como fallback.
code: gemini → gpt4o (Pro vira fallback)
src/config.py:TASK_TYPES
15
Frontier Routing · 2026-06-12
Sprint 15 — Tier FRONTIER: Claude Fable 5 nas tarefas mais complexas
claude-fable-5 (13º modelo canônico) primary de architecture e critical_review · fallback imediato Opus 4.8 em refusal · pricing oficial corrigido · catalog YAML v2.2
Highlights
claude-fable-5 (Anthropic, lançado 09-06-2026) é o 13º modelo canônico e inaugura o tier frontierPrimeira classe Mythos disponível ao público · SOTA em quase todos os benchmarks (SWE-Bench Pro 80.3% vs 58.6% GPT-5.5 e 54.2% Gemini 3.1 Pro)claude_fable primary de architecture e critical_review (complexity high) · pricing oficial $10/$50 por Mtok · 1M ctxRefusal handling: classificadores de segurança do Fable 5 podem recusar requests (stop_reason=refusal, HTTP 200) — LLMClient converte em erro e a chain cai para Opus 4.8 sem sair da família ClaudeEscada de tier Claude: Fable 5 (frontier) ↔ Opus 4.8 ↔ Sonnet 4.6 ↔ Haiku 4.5 com upgrade/downgrade automático em Router.downgrade_claude_by_complexityPricing oficial corrigido: claude-opus-4-8 $5/$25 (era listado $15/$75 como 4.7) e claude-haiku-4-5 $1/$5 (era $0.80/$4)Parser do LLMClient tolerante a blocos thinking (sempre ativos no Fable 5)Seeds AVG_COST_PER_CALL recalibrados: claude 0.10 → 0.035, claude_fable 0.20 · timeout critical_review 300 → 420s261 passed + 1 xfailed · tests/test_sprint15.py com 18 testes novos · catalog YAML v2.2
claude-fable-5 — 13º modelo canônico inaugura o tier frontier
claude-fable-5 (Anthropic, lançado 09-06-2026) entra no catálogo como alias claude_fable, primeiro modelo do tier frontier e primeira classe Mythos disponível ao público. SOTA em quase todos os benchmarks: SWE-Bench Pro 80.3% contra 58.6% do GPT-5.5 e 54.2% do Gemini 3.1 Pro. Contexto de 1M tokens e pricing oficial de $10/$50 por Mtok (2x o Opus 4.8). Total agora: 13 modelos canônicos em 6 providers, com hierarquia de tiers frontier → premium → standard → economy.
Por que esta decisão
Architecture e critical_review são as tarefas onde cada ponto de qualidade extra justifica o custo — exatamente o perfil em que o Fable 5 abre a maior distância sobre os flagships anteriores. Reservar o frontier a esses dois task types em complexity high mantém o custo sob controle (o roteador não permite que tarefas comuns subam de tier) enquanto captura o ganho de qualidade onde ele mais importa.
Refusal handling + fallback intra-provider Opus 4.8 + parser de blocos thinking
Os classificadores de segurança do Fable 5 podem recusar requests legítimos devolvendo stop_reason=refusal com HTTP 200. O LLMClient converte essa resposta em erro e a fallback chain cai imediatamente para claude (Opus 4.8), sem sair da família Claude — exceção documentada à regra cross-provider top-2, justificada pela continuidade de estilo e contexto em tarefas de arquitetura. O parser do LLMClient ficou tolerante a blocos thinking, sempre ativos no Fable 5. A escada de tier da família Claude passa a ser Fable 5 (frontier, só architecture/critical_review em complexity high) ↔ Opus 4.8 ↔ Sonnet 4.6 ↔ Haiku 4.5, com upgrade/downgrade automático em Router.downgrade_claude_by_complexity.
Por que esta decisão
Sem o tratamento de refusal, uma recusa do classificador apareceria como sucesso HTTP 200 com conteúdo inutilizável — falha silenciosa na tarefa mais crítica do plano. Converter em erro reaproveita toda a máquina de resiliência existente (fallback chain, circuit breaker, KPIs) e o degrau imediato Opus 4.8 preserva a qualidade premium sem latência extra de troca de provider.
stop_reason=refusal (HTTP 200) → erro → fallback Opus 4.8Exceção documentada à regra cross-provider top-218 testes novos cobrindo refusal e blocos thinking
Pricing oficial corrigido + seeds FinOps recalibrados + timeout critical_review
Correção canônica de pricing: claude-opus-4-8 custa $5/$25 por Mtok (a página listava Opus 4.7 a $15/$75 — ambos errados: o modelo canônico é Opus 4.8 desde 2026-05-29 e o pricing oficial é $5/$25) e claude-haiku-4-5 custa $1/$5 (era listado $0.80/$4). Seeds de AVG_COST_PER_CALL recalibrados: claude 0.10 → 0.035 e claude_fable 0.20. Timeout de critical_review elevado de 300 para 420s para acomodar os blocos thinking do Fable 5.
Por que esta decisão
Pricing errado contamina toda a cadeia FinOps — estimativas de custo, caps por provider e calibração de drift partem desses valores. Alinhar catálogo, seeds e timeouts ao pricing oficial fecha o ciclo da Sprint 15 e evita que o calibrador rejeite amostras reais por divergência artificial.
Opus 4.8: $5/$25 · Haiku 4.5: $1/$5AVG_COST_PER_CALL: claude 0.10 → 0.035 · claude_fable 0.20Timeout critical_review: 300 → 420s
Consolidação em 4 providers canônicos: Anthropic, OpenAI, Google, Perplexity — Groq Inc e xAI Grok removidos do roteamento9 modelos canônicos · catalog YAML v3.0 · 23 task types re-roteadosNOVO alias perplexity_fast (Sonar Pro, $3/$15) assume realtime_search, social_listening, current_events e brand_monitoringclassification/summarization/extraction → Gemini Flash (fallback Haiku, custo neutro vs Groq) · translation → GPT-5.5 (qualidade PT-BR)code_review → Sonnet 4.6 (fallback GPT-5.5) — upgrade deliberado ~10x num gate de qualidadeQualityJudge migrou de Groq para Gemini Flash (fallback Haiku) com ANTI-SELF-JUDGING: o juiz nunca é do provider dominante do output avaliado (producer_provider)Diversity guarantee: target = min(plan_size, 4) — o alvo 5 era inatingível com 4 providersCaps recalibrados: anthropic 45% · openai 45% · google 60% (herda o bulk ex-Groq) · perplexity 50% · invariante de outage: soma dos caps menos qualquer provider ≥ 1,40FinOps diário: Anthropic $100 · OpenAI $50 · Google $60 · Perplexity $40 · global $230 · RPM: Google 60 burst 5 (era 30), Perplexity 30 burst 3 (era 20)Invariante novo TESTADO: TASK_TYPES[t].primary == FALLBACK_CHAINS[t][0] e fallback == chain[1] para TODO task type · toda chain cobre 4/4 providersCOPY PREMIUM ONLY endurecido: Flash/Haiku proibidos em qualquer slot das chains de copy37 invariantes/sentinelas novos em tests/test_sprint16.py (sentinelas groq/grok/xai ausentes de todas as estruturas)312 passed + 1 xfailed · coverage 53% · 15.063 LOC em 39 arquivos .py · 5 commits em master (29c6e45..e9a1686) · CI Linux verdePerdas documentadas: busca live na timeline X/Twitter sem substituto · teto de contexto 2M → 1M · quebra de série do KPI distribution_health (base 5 → 4)
Consolidação em 4 providers — Groq e xAI removidos do roteamento
Provider set canônico reduzido de 6 para 4: Anthropic, OpenAI, Google e Perplexity. Groq Inc (Llama 4 Scout + Heavy gpt-oss-120b) e xAI Grok (grok, grok_multi, grok_fast) saem de TASK_TYPES, FALLBACK_CHAINS, caps e FinOps. Catalog YAML v3.0 documenta os 9 modelos canônicos restantes; sentinelas de teste garantem que as strings groq/grok/xai estão ausentes de todas as estruturas de roteamento.
Por que esta decisão
Groq era vala comum de bulk substituível a custo neutro (Gemini Flash cobre classification/summarization/extraction pelo mesmo custo efetivo). O xAI perdera o diferencial que justificava o provider: o search_parameters da timeline X foi descontinuado pela própria xAI em 29-mai (HTTP 410). Seis providers custavam governança (caps, FinOps, rate limits, circuit breakers, sentinelas) sem ganho proporcional de qualidade ou resiliência.
Re-roteamento dos 23 task types + Sonar Pro (perplexity_fast)
Novo alias perplexity_fast (Sonar Pro, $3/$15 por Mtok) assume os 4 task types realtime/social herdados do xAI (realtime_search, social_listening, current_events, brand_monitoring) com busca web ao vivo. Bulk ex-Groq (classification, summarization, extraction) migra para Gemini Flash com fallback Haiku 4.5 a custo neutro. translation → GPT-5.5 (qualidade PT-BR). code_review → Sonnet 4.6 com fallback GPT-5.5 — upgrade deliberado ~10x num gate de qualidade. review ganha fallback Gemini Flash. multi_perspective_decomposition → Sonnet; long_context_synthesis → Gemini Pro (1M ctx).
Por que esta decisão
Cada rota removida precisava de substituto à altura ou de upgrade deliberado. O bulk é neutro em custo; translation e code_review são gates de qualidade onde pagar mais é decisão consciente; Sonar Pro cobre web live geral — a exceção documentada é a timeline X/Twitter, que fica sem substituto direto, e o teto de contexto de 2M (grok_multi) que vira 1M (Gemini Pro).
QualityJudge em Gemini Flash com anti-self-judging
O QualityJudge migrou de Groq para Gemini Flash (fallback Haiku 4.5) e ganhou o parâmetro producer_provider: o juiz nunca pertence ao provider dominante do output avaliado. Se o plano foi majoritariamente Google, o julgamento desce a chain para um juiz de outra família.
Por que esta decisão
Um juiz do mesmo provider que produziu o output tem viés estrutural de auto-aprovação (self-preference bias). Com o Google herdando o bulk ex-Groq, o risco de o Flash julgar output do próprio Google subia — o anti-self-judging fecha esse buraco por construção, não por convenção.
Invariantes testados: TASK_TYPES == chains, caps com folga de outage, FinOps e RPM
Invariante novo TESTADO para TODO task type: TASK_TYPES[t].primary == FALLBACK_CHAINS[t][0] e TASK_TYPES[t].fallback == FALLBACK_CHAINS[t][1] — fecha o drift histórico entre as duas estruturas. Toda chain cobre 4/4 providers. COPY PREMIUM ONLY endurecido: Flash/Haiku proibidos em qualquer slot das chains de copy. Diversity target = min(plan_size, 4). Caps: anthropic 45% · openai 45% · google 60% · perplexity 50%, com invariante de outage (soma dos caps menos qualquer provider ≥ 1,40). FinOps diário: $100/$50/$60/$40, global $230. RPM: Google 60 burst 5 (era 30), Perplexity 30 burst 3 (era 20). Ao todo, 37 invariantes/sentinelas novos em tests/test_sprint16.py.
Por que esta decisão
Drift entre TASK_TYPES e FALLBACK_CHAINS foi fonte recorrente de bugs silenciosos desde a Sprint 11 — a partir de agora qualquer divergência quebra a suíte. O invariante de outage garante matematicamente que a perda de qualquer provider ainda deixa ≥ 140% de capacidade de share para redistribuir um plano inteiro. A quebra de série do KPI distribution_health (base 5 → 4 canônicos) fica documentada como perda de comparabilidade histórica.
37 invariantes/sentinelas novos312 passed + 1 xfailed · CI Linux verdeSoma caps − qualquer provider ≥ 1,40
Verificador pós-geração sobre outputs economy · painel de juízes 2-de-3 cross-family em gates premium · desenhada pelo próprio orquestrador (dogfooding)
Highlights
Verificador em cascata: outputs do tier economy que ALIMENTAM waves seguintes são pontuados 0-10 por verificador barato de OUTRO provider; score < 6,0 re-executa a task em alias não-economy ANTES de propagar (teto de 3 escalações/run)Painel de juízes 2-de-3 cross-family em tasks premium/frontier (~10% dos casos): 3 juízes de famílias distintas, mediana por dimensão, sempre excluindo o provider dominante — com 4 providers, excluir o produtor deixa EXATAMENTE 3 famíliasRobustez do dogfooding: reparo de JSON truncado no judge e no decompose + tetos maiores (judge 1600, decompose 8000 tokens)Fundamentos: arXiv 2606.27457 (Cluster-Route-Escalate: cascade retém 97-99% da acurácia do modelo mais forte), arXiv 2605.06350 (Is Escalation Worth It: sinais pós-geração dominam routing puro), arXiv 2604.23178 (Judging the Judges), arXiv 2604.22891 (Self-Preference Bias)
As Sprints 17-18 foram desenhadas pelo próprio orquestrador (dogfooding)
O plano das duas sprints saiu de uma run real do sistema: 20260708_191005, 13 tasks em 7 waves com cobertura 4/4 providers e custo total de US$ 0,4638. Pipeline da run: research (Sonar Pro) → fact_check (Gemini Pro) → analysis → architecture + critical_review (Sonnet) → writing (GPT-5.5) → triple review paralelo. O sistema especificou a própria evolução.
Por que esta decisão
Marco narrativo e de engenharia: o orquestrador virou instrumento do próprio roadmap. As premissas do CEO que guiaram o desenho: (1) o melhor dos melhores modelos nas tarefas mais complexas, onde cada ponto de qualidade importa; (2) economia nas tarefas simples; (3) latência NÃO é prioridade — qualidade e custo dominam. O dogfooding ainda expôs dois bugs de robustez corrigidos na própria sprint.
Run 20260708_191005: 13 tasks · 7 wavesCobertura 4/4 providersCusto do desenho: US$ 0,4638
Verificador em cascata pós-geração sobre outputs economy
Outputs do tier economy (Gemini Flash/Haiku 4.5) que alimentam waves seguintes são pontuados 0-10 por um verificador barato de OUTRO provider. Score < 6,0 re-executa a task no primeiro alias não-economy da fallback chain ANTES de propagar — output ruim da wave N não envenena a wave N+1. Teto de 3 escalações por run; cada escalação registra falha adaptativa do alias barato no router (feedback loop). Controlado pelas envs GEO_CASCADE_*.
Por que esta decisão
Cluster-Route-Escalate (arXiv 2606.27457) mostra que cascatas retêm 97-99% da acurácia do modelo mais forte pagando fração do custo; Is Escalation Worth It (arXiv 2605.06350) mostra que sinais pós-geração dominam routing puro quando o diferencial de custo é grande — exatamente o caso Flash/Haiku vs tiers premium. O gate protege a integridade do DAG: é mais barato verificar e re-executar 1 task do que degradar toda a cadeia downstream.
Score < 6,0 → re-run em alias não-economyTeto: 3 escalações/run~US$ 0,0005/check · verificador de outro provider
src/pipeline.pysrc/config.py:GEO_CASCADE_*tests
Painel de juízes 2-de-3 cross-family em gates premium/frontier
Em runs com tasks premium/frontier (writing, copywriting, seo, architecture, critical_review — ~10% dos casos), o veredito de qualidade deixa de vir de um juiz único: 3 juízes de famílias distintas pontuam, a mediana por dimensão agrega e o veredito mediano equivale à maioria 2-de-3 — sempre excluindo o provider dominante do output. Juiz único (Gemini Flash) segue no dia a dia. Ativado por GEO_JUDGE_PANEL.
Por que esta decisão
Judging the Judges (arXiv 2604.23178) e Self-Preference Bias (arXiv 2604.22891) documentam viés e variância de juiz único. Com 4 providers canônicos, excluir o produtor deixa EXATAMENTE 3 famílias — o desenho 2-de-3 nasce da topologia da Sprint 16, não de um número arbitrário. O custo extra só incide onde cada ponto de qualidade importa (premissa 1 do CEO).
3 juízes cross-family · mediana por dimensãoVeredito mediano = maioria 2-de-3Escopo: ~10% dos runs (gates premium/frontier)
src/quality_judge.pysrc/config.py:GEO_JUDGE_PANEL
Robustez descoberta no dogfooding: reparo de JSON truncado + tetos maiores
A run de desenho expôs dois bugs reais: o parse do judge só tolerava fence fechado (respostas truncadas derrubavam o judge inteiro) e o decompose truncava planos ricos, colapsando-os em 1 task. Ambos corrigidos com reparo de JSON truncado e tetos maiores de tokens: judge 1600, decompose 8000 (commit 9ecda91).
Por que esta decisão
Bugs que nenhuma bateria sintética pegou apareceram na primeira demanda auto-referente de verdade — argumento direto a favor do dogfooding contínuo. Sem o reparo, o colapso silencioso do decompose em 1 task anulava paralelismo, diversity guarantee e caps de uma vez.
Judge: teto 1600 tokensDecompose: teto 8000 tokensReparo de JSON truncado nos dois parsers
src/quality_judge.pysrc/adaptive_decomposer.py
18
Living Router · 2026-07-08
Sprint 18 — Router Vivo
Janela deslizante de 50 amostras domina o scoring · bateria canário semanal · priors de cold-start · shadow-routing como rampa da reintegração do xAI
Highlights
Janela deslizante de 50 amostras por (task_type, alias) DOMINA o scoring adaptativo (success 60% / custo 20% / latência 20%); histórico acumulado vira fallback — drift aparece em ~5 amostras (arXiv 2605.18859, TwinRouterBench: routers com histórico acumulado sofrem drift quando o pool de modelos muda)Bateria canário semanal (comando novo cli.py canary): 1 chamada mínima por alias grava a janela canary:<alias> · degraus do sinal: dados do task_type → canário → prior de cold-startPriors de cold-start por alias (Fable 0,92 … Haiku/Sonar Pro 0,83): alias novo não nasce invisível nem superestimadoShadow-routing log-only via GEO_SHADOW_ROUTE: conta quantas tasks TERIAM ido a um alias sem executar nem gastar — a rampa da reintegração futura do xAI (decisão do CEO: xAI NÃO reintegrado agora; plano de 1 semana de shadow → priors → ativação, em algumas semanas)
Janela deslizante de 50 amostras domina o scoring adaptativo
O score adaptativo de cada par (task_type, alias) passa a ser dominado por uma janela deslizante das últimas 50 amostras, ponderando success 60% / custo 20% / latência 20%; o histórico acumulado desde sempre vira apenas fallback quando a janela ainda não encheu. Com a janela, uma degradação real de provider aparece no score em ~5 amostras — antes, o histórico longo diluía o sinal por semanas. Janela configurável via GEO_ROUTER_WINDOW.
Por que esta decisão
TwinRouterBench (arXiv 2605.18859) mostra que routers com histórico acumulado sofrem drift quando o pool de modelos muda — exatamente o cenário do orquestrador, que trocou 6 → 4 providers na Sprint 16 e trocará de novo na reintegração do xAI. Pesos success >> custo ≥ latência refletem as premissas do CEO: qualidade e custo dominam, latência não é prioridade.
Janela: 50 amostras por (task_type, alias)Pesos: success 60% / custo 20% / latência 20%Drift visível em ~5 amostras
Bateria canário semanal + priors de cold-start por alias
Novo comando cli.py canary dispara 1 chamada mínima por alias e grava o resultado na janela canary:<alias>. O sinal do router vira uma escada de degraus: dados reais do task_type → canário → prior de cold-start. Os priors por alias (Fable 0,92 no topo … Haiku/Sonar Pro 0,83 na base) garantem que um alias novo não nasce invisível nem superestimado no scoring.
Por que esta decisão
Sem canário, um alias pouco usado ficava cego: nem dados de task_type, nem sinal recente de saúde. A bateria semanal custa centavos e mantém a janela viva para TODOS os aliases, inclusive os raramente roteados. Os priors resolvem o cold-start da reintegração de providers — condição necessária para a rampa do xAI planejada no shadow-routing.
1 chamada mínima/alias/semanaDegraus: task_type → canary:<alias> → priorPriors: Fable 0,92 … Haiku/Sonar Pro 0,83
cli.py:canarysrc/smart_router.py
Shadow-routing log-only — a rampa da reintegração do xAI
Com GEO_SHADOW_ROUTE ativo, o router conta quantas tasks TERIAM sido roteadas a um alias sem executar nem gastar nada — log-only puro. É a rampa da reintegração futura do xAI: medir a demanda real pelos aliases Grok antes de pagar 1 centavo por eles. DECISÃO DO CEO: o xAI NÃO foi reintegrado nesta sprint; o plano é 1 semana de shadow → priors calibrados → ativação, em algumas semanas.
Por que esta decisão
Reintegrar um provider sem dados repetiria o erro que o TwinRouterBench descreve: router opinando sobre um alias que ele nunca mediu. O shadow gera a evidência (volume de tasks candidatas, task types dominantes) que calibra os priors de cold-start antes da ativação — reentrada dirigida por dados, não por nostalgia do provider.
Log-only: zero execução, zero gastoRampa: 1 semana shadow → priors → ativaçãoxAI: fora do roteamento até a rampa concluir
A rampa da Sprint 18 concretizada · Grok 4.5 traz de volta a busca live na timeline do X · decisão validada contra a API viva, não contra marketing de vendor
Highlights
Parque volta a 5 providers / 11 modelos — xAI reintegrado (Groq segue fora). Decisão ancorada em bench INDEPENDENTE (Snorkel GDPval+, Artificial Analysis jul/2026) E em testes reais contra a API viva da conta, não em alegações do vendorgrok = Grok 4.5 ($2/$6, ctx 500K): primary de social_listening e brand_monitoring — o ÚNICO do parque com busca LIVE na timeline do X, restaurando a perda documentada do Sprint 16. Reforço em analysis (líder GDPval+: 29% vs 22% GPT-5.5 / 21% Opus 4.8 em jurídico/educação/saúde/QA)grok_reason = Grok 4.20 Reasoning ($1.25/$2.50): primary de multi_perspective_decomposition (raciocínio estendido, múltiplos pontos de vista — espírito do antigo grok_multi)Fora, com fundamento: grok-4.3 (redundante), grok-build-0.1 (Grok fica ABAIXO de Opus/Fable em SWE), grok-imagine-* (imagem/vídeo). Grok NUNCA é primary de code/architecture nem entra em copy premium PT-BR — sem evidência independente
Grok 4.5 restaura a busca live na timeline do X (social/brand)
social_listening e brand_monitoring sobem para o Grok 4.5, o único provider do parque com busca LIVE na timeline do X — onde a conversa de marca de fato vive. Restaura a PERDA DOCUMENTADA do Sprint 16 (o Sonar Pro cobre web geral, não a timeline X). O Sonar Pro vira o fallback desses dois. Descoberta crítica validada contra a API viva: o search_parameters legado (Live Search) foi DEPRECADO pela xAI — a busca migrou para a Agent Tools API (POST /v1/responses com os tools x_search + web_search, non-stream, tool_choice auto). Teste real contra a conta retornou 5 posts reais do X com citações.
Por que esta decisão
O motivo original de tirar o xAI no Sprint 16 (search_parameters HTTP 410) foi RESOLVIDO pela própria xAI com a Agent Tools API. Com a timeline X de volta, o monitoramento de marca deixa de depender de uma busca web genérica e passa a ler a fonte primária. tool_choice auto garante que o Grok só paga search quando a task pede — analysis não incorre custo de x_search.
social_listening + brand_monitoring → Grok 4.5Live X via /v1/responses (x_search)Teste real: 5 posts do X citados
Grok 4.20 Reasoning volta à decomposição multi-perspectiva
multi_perspective_decomposition volta a um modelo xAI de raciocínio estendido (grok_reason = grok-4.20-reasoning) — decompor em múltiplos pontos de vista com veracidade rigorosa era exatamente o papel do antigo grok_multi. Descoberta validada na API viva: o modelo MULTI-AGENTE da xAI não é chamável via chat completions ('Multi Agent requests are not allowed on chat completions'), então usamos o reasoning single-agent, que roda no endpoint OpenAI-compatible e é mais confiável que uma rota multi-agente quebrada. Fallback Claude Sonnet cobre outage do xAI.
Por que esta decisão
Testar contra a conta real (não confiar na doc) evitou embutir uma rota quebrada: o multi-agent responderia 400 em produção. O reasoning single-agent entrega o valor pedido (múltiplos ângulos, obediência estrita a instruções) por um caminho que comprovadamente funciona.
multi_perspective → Grok 4.20 ReasoningMulti-agent descartado (não chamável)Fallback Claude Sonnet
xAI aditivo: diversity floor nos 4 originais, invariantes de outage preservados
O xAI entra como provider ADITIVO/premium, engajado por TASK_TYPES/chains onde o bench prova valor — NÃO forçado por diversidade. A diversity floor do smart_router permanece nos 4 providers originais (resiliência de outage); o contrato de cobertura de chain relaxa de '== 4 providers' para 'SUPERSET dos 4 originais'. FinOps: cap xai 0,35 (invariante de outage: soma 2,35, pior caso Google-out 1,75 ≥ 1,40), limite diário $40, global 230 → 270 (< soma 290). Priors de cold-start grok 0,86 / grok_reason 0,85 — ABAIXO dos flagships, porque não há evidência independente do Grok em SWE/math. Suíte 358 verde no CI Linux.
Por que esta decisão
Forçar o Grok em planos por 'diversidade' rotearia tarefas inadequadas a ele. Mantê-lo aditivo preserva a resiliência de outage (4 providers em toda chain) e engaja o premium só onde há evidência — a definição de roteamento dirigido por dados que a Sprint 18 preparou.
Um incidente real de deep research expôs um bug latente sistêmico · timeout por-request no .post() · folga generosa sem economia que corte buscas longas · sentinela anti-drift
Highlights
Bug latente corrigido: o ConnectionPool cacheia um cliente por provider e CONGELAVA o read timeout do PRIMEIRO chamador — como decompose/adaptive_decomposer criavam clients sem override, a tabela TIMEOUT_BY_TASK_TYPE virava letra morta em runtime (research 600s e architecture/critical_review 720s cortados no default). Mesma classe do incidente sonar-pro vs prompt de research ~17k charsFix: timeout POR-REQUEST em cada um dos 6 client.post() (httpx.Timeout(self._timeout, connect=10.0)) — o pooling TCP/TLS fica intacto; override explícito em decompose, adaptive_decomposer, summarizer e verifierFolga generosa (timeout é TETO, não espera): bandas ~2x (research 600s, architecture/critical_review 720s, fact_check 420s), DEFAULT 300s, escape hatch global GEO_TIMEOUT_MULTIPLIER; janela de contexto entre waves 2000→12000 chars, truncamento de fallback 800/200→8000/3000Timeout adaptativo no retry (GEO_TIMEOUT_RETRY_FACTOR, default 1.5, cap base×2.5): após um timeout, a chamada é comprovadamente lenta — esticar o teto evita cair pro fallback mais caro por poucoSentinela de cobertura timeout_coverage no cli doctor (todo task_type conhecido precisa de banda explícita acima do piso da família) + novo comando cli.py timeouts que lista a banda EFETIVA por task_typecurso-factory (consumidor externo): HTTP_TIMEOUT default 300→600s até a migração para o geo_orchestrator_sdk (B-019)
Timeout por-request derrota o congelamento do ConnectionPool
O ConnectionPool (src/connection_pool.py) cacheia um httpx.AsyncClient por provider e aplica o read timeout apenas na CRIAÇÃO — toda chamada posterior devolve o cliente cacheado e ignora o parâmetro. Como a decomposição (primeira chamada Anthropic de quase toda run) e o adaptive_decomposer criavam clients sem timeout_override, o read timeout de cada provider ficava congelado no default e a tabela TIMEOUT_BY_TASK_TYPE não tinha efeito em runtime. Fix: passar timeout=httpx.Timeout(self._timeout, connect=10.0) em cada client.post() — o httpx honra o timeout por requisição sobre o do cliente, e o reuso de conexão TCP/TLS permanece intacto.
Por que esta decisão
O pooling existe para reuso de conexão, não para timeout; o timeout é por requisição. Sem isso, buscas longas (research/deep research) e tarefas complexas (architecture/critical_review no Fable 5) morriam cedo, de forma silenciosa e não-determinística (dependia de qual task aqueceu o pool primeiro).
6 call sites de .post() com timeout per-requestresearch 600s · architecture/critical 720s efetivos+10 testes (test_timeout_per_request + test_sprint20)
Timeout adaptativo no retry + sentinela de cobertura + cli timeouts
Três evoluções sobre o fix per-request. (1) Timeout adaptativo: após um httpx.TimeoutException, o próximo attempt do mesmo provider estica o teto (GEO_TIMEOUT_RETRY_FACTOR, cap base×2.5), registrado no span (timeout_from/timeout_to). (2) Sentinela timeout_coverage_report() + TIMEOUT_FAMILY_FLOORS: todo task_type de TASK_TYPES precisa de banda explícita e acima do piso da família — novo check no cli doctor (CRÍTICO se missing, ATENÇÃO se under_floor), fechando o drift que tornou a tabela letra morta. (3) python cli.py timeouts [--json] lista a banda EFETIVA por task_type (base × multiplicador), o retry factor e o estado de cobertura.
Por que esta decisão
O incidente foi invisível até ser diagnosticado. O timeout adaptativo dá resiliência sem custo extra em chamadas rápidas; a sentinela transforma a regressão silenciosa em falha explícita do doctor; o comando timeouts dá transparência operacional do que o orquestrador realmente usa.
Sprint 21 — Robustez para autonomia 24/7 (revisão CTO-Fable)
Revisão de engenharia com as lentes do /cto-fable · 5 gaps de enforcement inconsistente corrigidos · cada verify virou teste · local Windows == CI pela primeira vez
Highlights
Origem: revisão CTO-Fable (Nuvini · growthbuilders/projects/pierre/cto-fable) — veredito APPROVE_WITH_CHANGES, 1 HIGH + 5 MEDIUM + 1 LOW, nenhum CRITICAL. Tese: a máquina roda autônoma 24/7 (cron + Telegram + manual) e nem toda garantia declarada sobrevivia à concorrência e ao reroute em runtimeF1 (HIGH) — Escrita atômica dos state files: o padrão de atomicidade do FinOps (SQLite WAL, F23) propagado a .router_stats.json, .cost_calibration.json (+backup/rollback) e .semantic_index.json via tmp + os.replace; modo best_effort preserva a versão íntegra sob contenção Windows em vez de derrubar a run — o próprio teste de stress pegou que o raise mataria threadsF2 — Redirect por budget re-verifica o cap de concentração: hierarquia budget (duro) > cap (soft); sem candidato que satisfaça ambos, mantém o mais barato e loga CAP VIOLADO explícito — a invariante de resiliência de outage não é mais furada silenciosamente no apertoF4 — Cache semântico exact-only para writing/copywriting/seo/research/fact_check: colisão de público (dentistas ↔ advogados a ≥0,85 de cosseno) não pode mais servir conteúdo errado; tipos bulk preservam o hit semânticoF3 — ConnectionPool.shutdown real (só existia na docstring): wrapper _run_async fecha o pool num finally dentro do mesmo event loop nos 6 call-sites LLM do CLI + sentinela contra asyncio.run cruF7 — Suíte local Windows 100% verde pela primeira vez (383 passed, eram 361+6 falhas de artefato): .gitattributes -text no template do prompt (CRLF do checkout invalidava o prompt cache Anthropic ENTRE PLATAFORMAS — bug real de produto, não só de teste) + normalização short-path 8.3
Escrita atômica dos state files (F1 · HIGH)
Novo src/atomic_io.py: write_json_atomic/write_text_atomic — tmp no MESMO diretório (os.replace só é atômico dentro do mesmo volume) + os.replace, tmp único por pid+thread, retry com backoff+jitter para o PermissionError transitório do Windows. Modo best_effort default para state files: esgotou retries → loga warning, preserva a versão anterior íntegra e não propaga. Aplicado em router._save_stats, cost_calibrator (persist+backup+rollback) e semantic_cache._save_index.
Por que esta decisão
O race TOCTOU multi-processo foi fechado só no FinOps (SQLite WAL, achado F23 de 2026-04-08); os state files irmãos, com o MESMO padrão de acesso concorrente (cron + Telegram + manual), seguiam com write_text ingênuo — um leitor via JSON truncado, o loader resetava e o aprendizado do router vivo (janela de 50 amostras) era perdido inteiro. Limitação documentada: last-writer-wins entre escritores permanece — para estatística com janela, perder 1 update raro é aceitável; perder o arquivo não.
6 escritores × 25 writes + leitor em loop: 0 leituras corrompidasbest_effort: 0 threads derrubadas sob contençãoSentinela D2 contra regressão a write_text
Cap re-verificado no redirect + cache exact-only + pool lifecycle + local==CI
Pipeline._cap_aware_budget_redirect: o redirect por budget (get_cheapest_available) agora re-verifica PROVIDER_SHARE_CAP reusando _would_exceed_cap/_is_usable do Router — budget é restrição dura, cap é soft; violação sempre logada. EXACT_ONLY_TASK_TYPES no cache semântico (env GEO_CACHE_EXACT_ONLY_TYPES). _run_async no CLI fecha o ConnectionPool no mesmo loop. .gitattributes garante byte-identity do prompt entre plataformas.
Por que esta decisão
Quatro gaps da mesma família (enforcement inconsistente — a lente intended-vs-implemented do cto-fable): a garantia existe e parece valer, mas um caminho de runtime a fura. Num aperto de budget tudo convergia ao provider barato e estourava o cap exatamente quando a resiliência de outage mais importa; copy podia servir o público errado por sobreposição de tokens; o pool nunca fechava; e o prompt enviado do Windows era byte-diferente do Linux (SHA distinto → prompt cache Anthropic invalidado).
16 testes novos (4 por achado) em test_sprint21.py383 passed + 1 xfailed — local Windows == CI Linux pela 1ª vezDeferidos registrados: D6 SoT única, D8 SDK curso-factory, D9 multi-nó OUT
Sprint 22 — SDK call-level: call_llm() com o pipeline herdado
O orquestrador vira biblioteca sem perder a governança · chamada avulsa herda timeout, fallback e FinOps · curso-factory consome em modo opt-in
Highlights
call_llm() (B-019, deferido D8 da Sprint 21) expõe uma chamada LLM avulsa que HERDA do pipeline o timeout por task_type, a fallback chain e a governança FinOps — consumidores externos param de reimplementar retry/timeout/budget na mãoPrimeiro consumidor: curso-factory, em modo opt-in (CURSO_FACTORY_LLM_BACKEND=sdk) — zero mudança de comportamento até a ativação explícita em um curso de testeFonte do catálogo instrumentada no manifest (catalog.version/last_updated viram sinal auditável). 395 testes verde + 1 xfail
call_llm(): a garantia do pipeline em uma chamada avulsa
Nova superfície SDK: uma função call_llm() que roteia uma chamada única pelo mesmo LLMClient do pipeline — herdando TIMEOUT_BY_TASK_TYPE, a fallback chain do task_type e o registro FinOps (custo por provider, budget diário). O consumidor externo escolhe task_type e recebe a mesma resiliência do run completo, sem orquestrar waves.
Por que esta decisão
O curso-factory (e futuros consumidores) reimplementava HTTP_TIMEOUT e retry por conta própria — drift garantido em relação às bandas do orquestrador (o workaround 300→600s da Sprint 20 era sintoma). Centralizar a chamada avulsa no SDK elimina a classe inteira de drift.
Timeout/fallback/FinOps herdados do pipelinecurso-factory opt-in via CURSO_FACTORY_LLM_BACKEND=sdk395 testes verde
Sprint 23 — GPT-5.6 Sol + Luna — inserção evidence-driven
GPT-5.6 (lançado 09/07) entra por evidência de benchmarking global · Sol vira code primary e julgador cross-family · Luna reforça o volume · Terra fica fora da fronteira de Pareto · copy premium intacto
Highlights
gpt_sol = GPT-5.6 Sol ($5/$30, premium): PRIMARY de code — líder do AA Coding Agent Index (80 vs 77.2 do Fable; Terminal-Bench 88.8) — e julgador cross-family ADITIVO nas chains de analysis/code_review/critical_review/architecturegpt_luna = GPT-5.6 Luna ($1/$6, economy): entra em 7 chains de volume (classification, extraction, data_processing, social_listening, brand_monitoring, realtime_search, current_events) — mesma família, fração do custoGPT-5.6 Terra ficou DE FORA: fora da fronteira de Pareto (Artificial Analysis — Luna e Sol dominam por custo em toda a faixa de qualidade). Inserir modelo por completude de família seria hype, não evidênciaCOPY PREMIUM ONLY intacto: GPT-5.5 segue copy primary — Sol é fraco em escrita one-shot (último de 6 no bench da Every); Fable 5 segue frontier de julgamento/arquitetura (SWE-Bench Pro 80 vs 64.6 do Sol). Cache OpenAI reprecificado por modelo (Luna -55% de custo em cache hit no smoke real); caps openai 45%→50%, budget $70/dia (global $290), RPM 90/5
GPT-5.6 Sol assume code e vira julgador cross-family aditivo
code migra de GPT-5.5 para o GPT-5.6 Sol por evidência de relatório de benchmarking global: líder do AA Coding Agent Index (80 vs 77.2 do Claude Fable 5) e Terminal-Bench 88.8 — forças exatamente na geração agentic de código, terminal e tool use. Nas chains de analysis, code_review, critical_review e architecture o Sol entra como julgador cross-family ADITIVO (slot intermediário), ampliando a diversidade de famílias no painel sem destronar o Fable — que segue frontier de julgamento/arquitetura (SWE-Bench Pro 80 vs 64.6 do Sol).
Por que esta decisão
A mesma disciplina da Sprint 19 (xAI): rotear onde o bench independente prova valor, e SÓ onde prova. Sol ganha code porque lidera o índice específico de coding agent; NÃO ganha copy (último de 6 em escrita one-shot no bench da Every) nem arquitetura (abaixo do Fable em SWE-Bench Pro). Validação viva contra a conta: 4 chamadas reais, model ids confirmados, zero fallback.
code → GPT-5.6 Sol (AA Coding 80 · Terminal-Bench 88.8)Julgador aditivo em 4 chains de review451 testes verde + 1 xfail
Luna no volume, Terra fora (Pareto) e cache OpenAI por modelo
GPT-5.6 Luna ($1/$6, ctx 1050K) entra como reforço economy em 7 chains de volume — classification, extraction, data_processing, social_listening, brand_monitoring, realtime_search e current_events. O GPT-5.6 Terra ficou de fora: na análise custo-qualidade (Artificial Analysis), Luna e Sol dominam o Terra em toda a fronteira de Pareto. O cache da OpenAI foi reprecificado POR MODELO no catálogo — no smoke real, a Luna registrou -55% de custo em cache hit. FinOps recalibrado: cap openai 45%→50%, budget diário $70 (global $270→$290), RPM 90 (burst 5).
Por que esta decisão
Volume é onde preço por token e desconto de cache dominam a decisão — a Luna entrega a família 5.6 no tier economy sem canibalizar o papel do Gemini Flash/Haiku (entra como slot aditivo, não como primary). Recusar o Terra documenta o critério: só entra no parque quem domina algum ponto da fronteira.
Sprint 24 — Fechamento de loops — meta-harness e qualidade com consequência
O pipeline deixou de ser feed-forward · sinal duplo no router, judge com consequência, code verifier que RODA o código, replan + abort e breaker de qualidade · smoke real US$ 0,24 com o Google fora do ar · parque intocado
Highlights
Origem: report executivo "Meta-Harness & Loop Engineering" (deep research verificado: harness move +7,3pp com modelo fixo; autocorreção só funciona com sinal externo — Reflexion 91% vs 80%; reward hacking 43× maior com scoring visível) + auditoria de código que achou 2 mecanismos implementados e MORTOSSinal duplo no router: janela quality: separada do transporte; score 0.40 transporte + 0.30 qualidade + 0.20 custo + 0.10 latência com >=3 amostras fortes — fórmula byte-igual à legada sem amostras (provado bit a bit). record_feedback LIGADO (canal morto desde a Sprint 18): cascata + judge alimentam o roteamento; .router_feedback.jsonl nasceu em produção no smoke realJudge com consequência: avaliação por task (amostra estratificada, teto 6); REPROVADO → re-executa as 2 piores com issues sanitizadas → re-julga → persiste = entrega flagged (quality_flag) + exit code 3; falha técnica = REPROVADO_TECNICO com retry cross-provider — fim do score neutro 50%. Code verifier: código gerado agora RODA (ast.parse/json/node --check + execução em subprocess isolado + re-prompt com o erro literal, máx 2 fixes) — veredito determinístico substitui a contagem de chavesCascata convergente (re-pontua o que escala; 2ª reprovação → degraded + AVISO explícito no contexto dos dependentes — fim da amputação silenciosa) + replan + abort: AdaptiveDecomposer REATIVADO (task FAILED com dependentes → substituta sob o mesmo id); colapso de plano → PlanCollapseError + exit code 4; decompose ganhou fallback cross-provider de transporte (validado com Google 429 real: Sonnet assumiu)Breaker de qualidade por (task_type, alias): 3 reprovações fortes → alias ao fim da chain daquele task type (nunca removido), cooldown 6h; KPIs novos cost_per_accepted_task e degraded_rate. Outer loops agendados: canário semanal + dogfooding mensal (o orquestrador propõe as 3 melhorias da próxima sprint; humano aprova) via Task Scheduler; doctor com checks quality_signal e canary_freshness. Anti reward-hacking (6 invariantes): rubrica nunca vaza ao gerador, issues sanitizadas, verificador cross-provider, teto de influência 0.30Smoke real: US$ 0,24 — 7/7 tasks OK com o Google TOTALMENTE fora do ar (429); os loops novos seguraram em produção. Flags GEO_* com kill-switch; todas off = Sprint 23 byte-igual. 531 testes verde (+1 skipped, +1 xfailed; +79 do test_sprint24). Parque INTOCADO: 13 modelos / 5 providers, catálogo 4.1
Sinal duplo no router + record_feedback ligado (canal morto desde a Sprint 18)
O scoring adaptativo ganha uma janela quality: separada da janela de transporte: com >=3 amostras fortes de qualidade, o score vira 0.40 transporte + 0.30 qualidade + 0.20 custo + 0.10 latência; sem amostras, a fórmula é byte-igual à legada (provado bit a bit em teste). O record_feedback — implementado na Sprint 18 e nunca chamado — foi LIGADO: o verificador em cascata e o judge passam a alimentar o roteamento, e o .router_feedback.jsonl nasceu em produção no smoke real.
Por que esta decisão
A auditoria de código achou o mecanismo pronto e morto: o router aprendia só com sinal de transporte (sucesso HTTP), cego para qualidade. O report Meta-Harness & Loop Engineering quantifica o porquê: harness move +7,3pp com o modelo fixo, e autocorreção sem sinal externo não funciona (Reflexion 91% vs 80%). O teto de influência de 0.30 no peso de qualidade é um dos 6 invariantes anti reward-hacking.
531 testes+79 invariantes de loopfórmula legada byte-igual sem amostras
Judge com consequência + code verifier que executa o código gerado
O judge sai do papel decorativo: avaliação por task em amostra estratificada (teto 6); veredito REPROVADO re-executa as 2 piores tasks com issues sanitizadas, re-julga e persiste — a entrega sai flagged (quality_flag) com exit code 3. Falha técnica do juiz vira REPROVADO_TECNICO com retry cross-provider (fim do score neutro 50% que aprovava por omissão). Para código, o veredito virou determinístico: ast.parse/json/node --check + execução em subprocess isolado + re-prompt com o erro literal (máx 2 fixes) substituem a contagem de chaves.
Por que esta decisão
Qualidade sem consequência é telemetria, não gate: antes, um run REPROVADO era entregue igual a um aprovado. O sinal externo verificável (código que roda, judge cross-provider com rubrica que nunca vaza ao gerador) é o que a literatura exige para autocorreção funcionar — e o scoring visível ao gerador multiplicaria reward hacking por 43×, daí as issues sanitizadas.
REPROVADO → flagged + exit code 3código roda em subprocess isolado (máx 2 fixes)smoke US$ 0,24 · 7/7 tasks com Google fora
Cascata convergente, replan + abort, breaker de qualidade e outer loops agendados
A cascata re-pontua o que escala e, na 2ª reprovação, marca degraded com AVISO explícito no contexto dos dependentes (fim da amputação silenciosa). O AdaptiveDecomposer foi REATIVADO para replan: task FAILED com dependentes gera substituta sob o mesmo id; colapso de plano aborta com PlanCollapseError + exit code 4. O decompose ganhou fallback cross-provider de transporte — validado com Google 429 real (Sonnet assumiu). Breaker de qualidade por (task_type, alias): 3 reprovações fortes mandam o alias ao fim da chain daquele task type (nunca removido), cooldown 6h. Outer loops via Task Scheduler: canário semanal + dogfooding mensal em que o orquestrador propõe as 3 melhorias da próxima sprint (humano aprova); doctor ganhou checks quality_signal e canary_freshness. KPIs novos: cost_per_accepted_task e degraded_rate.
Por que esta decisão
Era o segundo mecanismo implementado e morto: o AdaptiveDecomposer existia desde a arquitetura original e nunca replanejava. Fechar o loop de plano (replan/abort com exit codes distintos) e o loop de temporada (outer loops agendados) transforma falha silenciosa em decisão auditável — e tudo fica atrás de flags GEO_* com kill-switch: todas off = Sprint 23 byte-igual.
531 testes+79 invariantes de loopsmoke $0.24 com Google fora
Itens identificados pela literatura 2025-2026 (AdaptOrch, DAAO, FrugalGPT, RCR-Router, Mixture of Agents) + análise técnica dos 5 providers / 13 modelos em produção + revisão crítica das 24 sprints lançadas. A reintegração do xAI Grok — antes item de backlog — foi ENTREGUE na Sprint 19 (09/jul): Grok 4.5 (busca live na timeline do X em social/brand) e Grok 4.20 Reasoning (multi_perspective). A Sprint 22 entregou o SDK call-level (B-019), a Sprint 23 (10/jul) somou GPT-5.6 Sol (code primary) e Luna (volume) por evidência de benchmarking — parque de 13 modelos — e a Sprint 24 (10/jul) fechou os loops de qualidade (judge gate, code verifier, replan + abort). Os achados FinOps/KPI da Sprint 23 abaixo seguem ABERTOS — a Sprint 24 não os cobriu.
Decidir topology (parallel/sequential/hierarchical/hybrid) ANTES de escolher modelo. Hoje o pipeline decide modelo task-by-task; topology emerge do DAG implícito.
Justificativa
AdaptOrch (arXiv:2602.16873, fev/2026) reporta +12-23% sobre baselines com topology-first. Identificar pattern (fan-out, pipeline, debate, hierarchical-judge) antes de allocate model permite escolher também o número de réplicas e o critério de fan-in adequado. Sem isso, planos COMPLEX se beneficiam parcialmente da paralelização porque a topologia é implícita.
Critérios de aceitação
›src/topology_router.py classifica demanda em {parallel, sequential, hierarchical, hybrid}
›Decomposer recebe topology hint e gera plano alinhado
›5 demandas exemplo cobrindo cada topology + run real comparativo
›KPI topology_match_rate em .kpi_history.jsonl
P0Sprint 122 dias
origem: Paper DAAO 2509.11079
Difficulty-conditional depth (DAAO set/2025)
Substituir complexity score único (1-5) por tupla (difficulty ∈ [0,1], n_subtasks, needs_judge, evidence_required, realtime_data). Cada dimensão pondera independentemente o tier alocado.
Justificativa
DAAO (arXiv:2509.11079, set/2025) reporta +11,21% accuracy com 64% do custo. Score único cega o router para casos como "baixa difficulty + alto evidence_required" (research curto mas com fact-check rigoroso) que hoje vai indevidamente para Sonnet em vez de Perplexity + Haiku review.
Critérios de aceitação
›src/difficulty_dims.py extrai 5 dimensões da demanda
›SmartRouter consome tupla em vez de complexity int
origem: Smoke real da Sprint 23 (llm_client.py:400 + llm_call.py:126)
Dupla contabilidade FinOps no caminho call_llm() (achado da Sprint 23)
Cada chamada via SDK é registrada DUAS vezes no ledger diário: o LLMClient._call registra internamente (task_id _llmclient_<alias>) e o call_llm_async registra de novo (sdk_call_<task_type>). O smoke real da Sprint 23 provou o delta: gasto reportado exatamente 2× o custo real. O mesmo padrão de sobreposição existe no pipeline.
Justificativa
Descoberto pela validação viva da Sprint 23 (4 chamadas, custo real US$ 0,00452 vs delta de ledger US$ 0,009039). Pré-existente da Sprint 22 — não é regressão. O budget guard fica conservador demais (bloqueia antes do necessário) e qualquer leitura de gasto por provider via FinOps infla o openai nas chamadas SDK. Medir certo antecede otimizar.
Critérios de aceitação
›Registro único por chamada: ou o client registra, ou o chamador — nunca os dois
›Teste de não-regressão: 1 call_llm() gera exatamente 1 linha de custo no ledger
›daily_status() bate com a soma dos custos reais das respostas no smoke
Para task type T, tentar primeiro Flash/Haiku; se a saída tem confidence < threshold, escalar para Pro/Opus. Hoje todas as tasks com tier alocado pagam o tier desde a primeira chamada. (Sprint 16 substituiu o degrau economy Scout → Flash/Haiku com a saída do Groq.)
Justificativa
FrugalGPT mostra que ~60% das tasks medium são respondíveis por modelos economy se aceitamos retry no caso de baixa confiança. Adicionando confidence_score ao return do LLMClient, podemos cortar custo significativo em tasks medium sem perder qualidade nos casos difíceis.
›Router._try_cascade: economy → standard → premium
›Threshold configurável via env CASCADE_CONFIDENCE_MIN
›Métrica cascade_save_rate em .kpi_history.jsonl
›5 testes cobrindo escala e custo total
P1Sprint 131,5 dia
origem: Paper RCR-Router
Role-aware context routing (RCR-Router)
Cada subagent recebe apenas o subset relevante da memória/contexto para seu papel. Hoje todas as tasks recebem o briefing completo, inflando tokens em ~30%.
Justificativa
RCR-Router (paper recente) reporta -30% tokens sem perda de qualidade quando cada role recebe contexto filtrado. Hoje uma task de classification recebe o mesmo briefing de 5KB que uma task de architecture — desperdício direto.
Critérios de aceitação
›src/context_filter.py: filtragem por task_type
›Filtros por role: research → references only, code → spec only
Sprint 13 executou bateria E2E manual contra APIs reais (ping + board + run completos, à época 6 providers, custo ~$0,09/run). Com a consolidação da Sprint 16 a bateria passa a cobrir os 4 providers canônicos. Falta tornar essa bateria um workflow CI semanal gated por GEO_E2E_REAL=1 com artifact anexado.
Justificativa
Bateria E2E manual da Sprint 13 já validou os contratos de API e expôs os 6 fixes (TASK_TYPES, diversity target, model_id, citations Perplexity, thinkingBudget Gemini, UX wave preview). Falta automatizar para detecção contínua: regressões silenciosas em providers passam despercebidas entre baterias manuais.
Critérios de aceitação
›tests/test_e2e_real.py com marker pytest skip se GEO_E2E_REAL != 1
›Demanda mínima (~6 tarefas) com BUDGET_LIMIT=0.10
›Cobertura dos 4 providers canônicos (pós-Sprint 16) em uma única run
›CI separado em workflow opcional rodando 1x por semana
›Relatório anexado como artifact
P1Sprint 120,5 dia
origem: Sprint 7 deferred
Deploy do dashboard HTML em alexandrecaramaschi.com
Pipeline diário que gera o dashboard HTML via cli.py dashboard --html e publica em alexandrecaramaschi.com/geo-orchestrator/dashboard.
Justificativa
O HTML já existe (Sprint 7) mas vive apenas localmente. Publicar dá visibilidade pública dos KPIs reais — substitui screenshots estáticos pelo estado vivo do sistema.
›Upload do HTML para public/geo-orchestrator/dashboard.html
›Link na página /geo-orchestrator
›Cache busting via timestamp na URL
P2Sprint 131 dia
origem: Roadmap empresarial
Endpoint /metrics no formato Prometheus
Adicionar GET /metrics?format=prometheus que serve as métricas em formato exposition compatível com Prometheus scraping.
Justificativa
Empresas que adotam o orchestrator em escala precisam plugar em sua stack de observabilidade existente. Prometheus é o padrão de facto. Custo de implementação é baixo porque os KPIs já existem em jsonl.
Critérios de aceitação
›Conversão de .kpi_history.jsonl para exposition format
Adicionar GEO_TENANT env var que prefixa output/, .kpi_history e .cost_calibration por tenant.
Justificativa
Para empacotar o orchestrator como produto SaaS Brasil GEO, precisamos isolar os dados por cliente. Multi-tenant é pré-requisito para a próxima fase comercial.
Critérios de aceitação
›GEO_TENANT define output/${tenant}/ como base
›FinOps limits por tenant
›doctor + dashboard --tenant flag
›Migração: tenant default 'main' para retro-compat
CONCLUÍDO. A rampa da Sprint 18 (shadow → priors → ativação) foi concretizada. Grok 4.5 volta como primary de social_listening/brand_monitoring (busca LIVE na timeline do X via Agent Tools API, restaurando a perda do Sprint 16) e Grok 4.20 Reasoning como primary de multi_perspective_decomposition. Parque: 5 providers / 11 modelos. Decisão validada contra a API viva da conta da governança — não contra marketing de vendor.
Justificativa
O motivo original da remoção (search_parameters HTTP 410) foi resolvido pela própria xAI com a Agent Tools API (/v1/responses com x_search). A reintegração foi dirigida por dados: bench independente (Snorkel GDPval+ — Grok líder em julgamento profissional) definiu ONDE rotear, e testes reais contra a conta corrigiram a doc desatualizada (Live Search depreciado; multi-agent não chamável via chat completions). O xAI entra ADITIVO/premium — nunca primary de SWE (abaixo de Opus/Fable) nem de copy premium.
Critérios de aceitação
›✓ grok (grok-4.5) primary de social_listening/brand_monitoring — live X via /v1/responses
›✓ grok_reason (grok-4.20-reasoning) primary de multi_perspective_decomposition
›✓ Agent Tools API implementada e validada contra a conta (5 posts reais do X citados)
›✓ Caps/FinOps/invariante de outage recalculados (xai cap 0,35 · outage 1,75 ≥ 1,40)
›✓ Sentinelas do Sprint 16 revisadas + test_sprint19.py (358 testes verde no CI Linux)
P2Sprint 230,5 dia
origem: Revisão da Sprint 23 (kpi_history.py)
distribution_health: consolidar gpt_sol/gpt_luna no slot openai do KPI
O kpi_history mantém a base de generalistas canônicos (claude, gpt4o, gemini, perplexity). Com o code migrado do gpt4o para o gpt_sol na Sprint 23, o share de code sai do slot gpt4o sem consolidação — o distribution_health verá queda no slot openai que não é queda real de uso do provider.
Justificativa
Mesma decisão de produto já tomada para a família Claude (Sonnet consolida em claude) e para o xAI (fora do distribution_health por nicho). Precisa de decisão explícita + teste, não de correção às pressas.
Critérios de aceitação
›Decisão documentada: consolidar aliases OpenAI no slot canônico ou expor slots separados
›Teste cobrindo a agregação escolhida
P2Sprint 230,5 dia
origem: Revisão da Sprint 23 (orchestrator.py)
_validate_balance com type_to_llm['code'] == 'claude' defasado
A heurística de balanceamento do orchestrator ainda mapeia code para claude — defasado desde junho (code era gpt4o desde a Sprint 14 e agora é gpt_sol na Sprint 23). Não quebra roteamento (é heurística de injeção de balance), mas mente sobre o parque.
Justificativa
Inconsistência pré-existente descoberta na varredura da Sprint 23. Alinhar a heurística ao TASK_TYPES real evita que o balance empurre demanda para a família errada em planos grandes.
Critérios de aceitação
›type_to_llm derivado de TASK_TYPES (ou sentinela que quebre quando divergir)
›Teste de paridade heurística vs roteamento canônico
P2Sprint 230,5 dia
origem: Calibração FinOps da Sprint 23 (rate_limiter.py)
Probe de RPM openai 90/5 em produção (subiu de 60/3 na Sprint 23)
O rate limiter do provider openai subiu para 90 RPM / burst 5 para acomodar 3 modelos (gpt4o, gpt_sol, gpt_luna). Falta o probe pós-merge contra a API real em carga de run completo — com rollback simples para 60/3 se a API sinalizar 429.
Justificativa
Mesmo protocolo do ajuste do Google na Sprint 16: subir limite acompanhado de probe e rollback documentado. O smoke da Sprint 23 validou chamadas unitárias, não rajada.
Critérios de aceitação
›Run real com fan-out openai registrando current_rpm máximo e zero 429
›Rollback documentado (60/3) caso a API rejeite a cadência
FinOps & integração
Loop de governança que roda sem operador enquanto as métricas ficam dentro dos limites configurados: detecta drift, recalibra, aplica safety threshold, faz backup automático e escala para revisão humana quando o limite é ultrapassado. Quatro vias de health check (CLI, HTTP, HTML, recovery) para integrar a qualquer pipeline existente.
Loop FinOps fechado · 5 providers
Detecção → ação corretiva → próxima execução com valores ajustados. Sem dashboard manual. Pós-Sprint 10, AVG_COST_PER_CALL[perplexity] foi auto-recalibrado de $0,008 para $0,05 após a bateria 360. Pós-Sprint 19, FINOPS_DAILY_LIMITS cobre os 5 providers — Anthropic $100 · OpenAI $50 · Google $60 · Perplexity $40 · xAI $40, teto global $270/dia — e o rate limiter cobre o xAI a 60 RPM (burst 3), Google a 60 RPM (burst 5) e Perplexity a 30 RPM (burst 3). Pós-Sprint 17, o verificador em cascata custa ~US$ 0,0005 por check e tem teto de 3 escalações por run — o gate de qualidade entra no loop sem abrir flanco de custo; a escalação alimenta o router como falha adaptativa do alias barato (Sprint 18).
1
Custo real persistido
Cada execution_*.json grava cost por LLM, latência, tokens e verdict.
2
Drift detector
Se 3 runs consecutivos saem da banda 0.7-1.5x, alerta dispara em .kpi_history.jsonl.
3
Auto-trigger recalibrate
Orchestrator chama recalibrate() varrendo os últimos 30 reports — sem intervenção humana.
4
Safety threshold
Calibrações > 5x ou < 0.2x do default são rejeitadas e logadas em safety_rejections[].
5
Backup automático
.cost_calibration.json copiado para .backup.json antes de persistir. cli.py finops calibrate-rollback restaura.
6
Próximo pre_check usa AVG calibrado
Loop fechado: o run seguinte aplica os custos atualizados sem ação humana.
Comandos de health check
Quatro vias de saúde: síncrona (CLI), assíncrona (HTTP), publicável (HTML) e recuperação manual.
$ cli.py doctor --strict --json
6 health checks (api_keys, catalog, finops, kpi, calibration, drift). Saída humana ou JSON. --strict faz exit 1 — pronto para CI gating.
$ cli.py serve --port 8080
Servidor HTTP stdlib. GET /health (200/503), /metrics (KPI timeseries), / (docs). Bearer token opcional via GEO_HEALTH_TOKEN.
$ cli.py dashboard --html public/dashboard.html
Gera HTML auto-contido com Chart.js. 5 gráficos + KPI cards + tabela dos 10 últimos runs. Deploy em qualquer servidor estático.
$ cli.py finops calibrate-rollback
Restaura .cost_calibration.backup.json se a recalibração mais recente apresentou drift suspeito. Recovery one-shot.
Perguntas frequentes
Dúvidas técnicas e conceituais sobre o geo-orchestrator pós-Sprint 16.
Sprint 16 (08-07-2026): por que remover Groq e xAI do roteamento e o que se perdeu?
A consolidação de 6 para 4 providers (Anthropic, OpenAI, Google, Perplexity) seguiu três diagnósticos. (1) Groq Inc era vala comum de bulk substituível a custo neutro: classification/summarization/extraction migraram para Gemini 3.5 Flash ($0,30/$2,50) com fallback Haiku sem impacto de custo; o Google herdou o bulk ex-Groq (cap 60%). (2) xAI perdera o diferencial: a busca live na timeline X via search_parameters — o único motivo de ser do provider — foi descontinuada pela própria xAI em 29-mai-2026 (HTTP 410); o novo Sonar Pro (perplexity_fast, $3/$15) assumiu realtime_search/social_listening/current_events/brand_monitoring cobrindo web live geral. (3) 6 providers custavam governança (chaves, budgets, breakers, calibração) sem ganho proporcional. Perdas documentadas com transparência: busca live na timeline X/Twitter fica sem substituto; o teto de contexto de 2M (grok_multi) vira 1M (Gemini Pro); e o KPI distribution_health quebra a série histórica (base 5 → 4 canônicos). A remoção é blindada por 37 invariantes/sentinelas novos em test_sprint16.py (sentinelas 'groq'/'grok'/'xai' ausentes de todas as estruturas; toda chain cobre 4/4 providers; TASK_TYPES[t].primary == FALLBACK_CHAINS[t][0] para os 23 task types). ATUALIZAÇÃO Sprint 19 (09-07-2026): o xAI foi REINTEGRADO — o motivo da saída (search_parameters HTTP 410) foi resolvido pela própria xAI com a Agent Tools API (/v1/responses com x_search). Grok 4.5 voltou como primary de social_listening/brand_monitoring (busca live na timeline do X, restaurando a perda) e Grok 4.20 Reasoning em multi_perspective_decomposition. Parque hoje: 5 providers / 13 modelos (GPT-5.6 Sol e Luna somados na Sprint 23), com o xAI aditivo (nunca primary de SWE nem copy premium).
Sprint 13 (19-05-2026): o que a bateria E2E pós-Sprint 12 mudou no orquestrador?
A bateria E2E (ping 6/6 OK $0,006 + board 5/5 paralelo + run completo 5 tasks/3 waves $0,0885) expôs 6 gaps fechados em sequência. (1) TASK_TYPES: analysis agora tem primary=gemini Pro (era Flash) e fallback=gemini_flash (era groq_heavy); review primary=claude_sonnet (era groq_heavy) com fallback=groq_heavy — na Sprint 16 esse fallback passou a Gemini Flash; fact_check fallback=gemini Pro (era Flash); data_processing fallback=gemini Pro (era groq). Motivações: usuário tem crédito Google Cloud carregado, Gemini Pro precisa entrar em produção (não só Flash); Sonnet 4.6 supera Groq Heavy em qualidade editorial PT-BR e garante presença Anthropic em planos COMPLEX (cobertura 4/5 → 5/5). (2) Diversity guarantee dinâmico: target = min(len(tasks), 5) — antes fixo em 4; recalibrado para min(plan_size, 4) na Sprint 16, quando o universo canônico caiu para 4 providers. (3) TaskResult + LLMResponse expõem model: str e citations: list[str]; antes ficava model='?' no execution_*.json. (4) Perplexity sonar-deep-research com return_citations=true + return_related_questions=false + search_recency_filter='year' no POST body — bateria validou Aggarwal SIGIR 2024 e Reyes-Lillo 2025 com DOIs reais. (5) Gemini 2.5 Pro thinkingBudget guard: reserva 1/3 do max_tokens para thinking (mín 512, máx 2048), 2/3 para output; corrige bug em que Pro consumia todo budget em thinking interno e retornava parts=[] silencioso. (6) UX em tempo real: pipeline imprime '>>> Wave N (X em paralelo)' antes de cada wave e '[OK] tN -> provider (model_id) -> Xs | Y tok | $Z' depois de cada task — fim do silêncio entre wave-start e relatório final.
Sprint 12 (17-05-2026): por que copy só pode usar modelos premium e por que Perplexity virou prioridade absoluta em research?
Duas diretrizes canônicas conectadas. (1) COPY PREMIUM ONLY: writing, copywriting e seo agora só rodam em GPT-5.5 (primary), Claude Opus 4.7 (1º fallback) ou Gemini 2.5 Pro (2º fallback). Sonnet/Haiku/Flash banidos de copy. Motivo: voz editorial PT-BR de Alexandre exige reasoning nativo, 1M ctx e densidade lexical que tiers menores não entregam consistentemente em copy longa. Incidente curso saude-mental-vibecoding (14-05-2026, 3741 linhas sem acentos por sub-agente Sonnet) comprovou que o tier importa. Custo extra (~$10/run editorial) vence o retrabalho de QA. (2) PERPLEXITY PRIORIDADE: cap por provider restaurado 0,35 → 0,50 (era de Sprint 10/bateria 360 quando 1 task dominava 84% do wall time, mas o adaptive_decomposer agora decompõe research em sub-tasks naturalmente). FALLBACK_CHAINS['research'] reordenado para perplexity → gemini Pro → claude Opus → gpt-5.5; groq só como último recurso. Citações verificáveis vencem velocidade/custo em research.
Como a hierarquia de copy se reflete tecnicamente no código?
Três pontos. (1) TASK_TYPES em src/config.py: writing/copywriting/seo têm primary=gpt4o (gpt-5.5) e fallback=claude (Opus 4.7) — antes eram gemini, claude_sonnet, perplexity respectivamente. (2) FALLBACK_CHAINS de copy premium-tier de ponta a ponta — pós-Sprint 16 groq_heavy saiu de todas as chains e a diretriz foi endurecida: Flash e Haiku proibidos em qualquer slot das chains de copy (invariante COPY PREMIUM ONLY testado em test_sprint16.py). (3) smart_router._ensure_provider_diversity: em planos COMPLEX 5+ tasks quando Anthropic está ausente, tenta promover writing/copywriting/seo → Opus ANTES de promover decomposition → Sonnet. Garante que mesmo em diversity upgrade o tier de copy permaneça premium. Catalog YAML sincronizado (hoje v4.1 · 5 providers, 13 modelos canônicos — reintegração do xAI no Sprint 19, GPT-5.6 Sol/Luna na Sprint 23); pricing GPT-5.5 $5.00/$15.00 por Mtok refletido na suíte. A Sprint 23 não tocou em copy: o GPT-5.6 Sol assumiu code, mas writing/copywriting/seo seguem no GPT-5.5 (Sol é fraco em escrita one-shot — último de 6 no bench da Every).
O que mudou na Sprint 11 (17-05-2026) e por que é importante?
Sprint 11 transformou o orquestrador em uma plataforma de 6 providers (era 5). Quatro entregas conectadas: (1) xAI Grok integrado como 6º provider canônico — 3 entradas LLMConfig (grok 4.3 flagship 1M ctx, grok_multi 4.20-multi-agent 2M ctx com 4 agentes paralelos nativos, grok_fast 4.20-non-reasoning) com API OpenAI-compatible em api.x.ai/v1; (2) 6 task types novos exclusivos do canal Grok — realtime_search, social_listening, current_events, brand_monitoring, multi_perspective_decomposition, long_context_synthesis — porque search_parameters: auto dá acesso live a X/Twitter que nenhum outro provider tem; (3) diversity guarantee em planos COMPLEX 5+ tasks garante cobertura mínima de 4/6 providers únicos (66%), baseado em Mixture of Agents (Wang 2024), DAAO (set/2025) e AdaptOrch (fev/2026); (4) upgrade simultâneo: Claude Opus 4.6 → 4.7, Groq default Llama 3.3 70B → Llama 4 Scout 17B 16E (5x mais barato), Groq Heavy default consolidado em openai/gpt-oss-120b. Bridge ping 6/6 OK $0,006/exec. Nota: a própria xAI descontinuou search_parameters em 29-mai-2026 (HTTP 410) — o diferencial se perdeu e o provider saiu do roteamento na Sprint 16, junto com Groq Inc.
xAI Grok (com K) é a mesma coisa que Groq (com Q)?
Não. São 2 empresas e 2 stacks completamente diferentes que coincidentemente têm nomes parecidos. xAI Grok (com K) é a empresa de Elon Musk; modelos próprios (grok-4.3, grok-4.20-multi-agent, grok-4.20-non-reasoning) com diferencial único de busca live em X/Twitter via search_parameters. Groq Inc (com Q) é a empresa de chips LPU; opera infra de inferência ultra-rápida para Llama 4 Scout 17B 16E e openai/gpt-oss-120b. O orquestrador manteve os 2 como providers canônicos distintos das Sprints 11 a 15 (Provider.XAI e Provider.GROQ) — ambos foram removidos do roteamento na Sprint 16, por motivos independentes: Groq era bulk substituível a custo neutro por Gemini Flash; a xAI perdera o diferencial de busca live em X. Sentinelas em test_sprint16.py garantem que nenhum dos dois volta por drift. Confusão de nome custa caro em ops — vale tratá-las sempre separadamente.
O que é a diversity guarantee e como ela funciona pós-Sprint 16?
Em planos COMPLEX (5+ tasks), o método _ensure_provider_diversity do SmartRouter garante que pelo menos target = min(plan_size, 4) providers canônicos apareçam no plano. Sprint 13 introduziu o alvo dinâmico (min(plan, 5)); a Sprint 16 recalibrou para 4 e a Sprint 19 manteve a floor nos 4 providers ORIGINAIS (resiliência de outage) — o xAI reintegrado é aditivo, roteado por task type onde o bench prova valor, não forçado por diversidade. Quando rebalance_plan_assignments inicial não atinge o alvo, o router faz upgrades estratégicos usando hints por provider ausente: se Anthropic está faltando, promove a task com complexity mais alta para architecture/critical_review/review; se Perplexity está faltando e há sinal realtime/social, reclassifica para realtime_search (Sonar Pro). Os caps por provider (anthropic 45% · openai 45% · google 60% · perplexity 50% · xai 35%, Sprint 19) obedecem ao invariante de outage: a soma dos caps menos qualquer provider individual >= 1.40 — o plano fecha mesmo com um provider inteiro fora. Baseado em 3 papers: Mixture of Agents (Wang 2024, arXiv:2406.04692) — ensemble heterogêneo supera homogêneo em quality médio +7-15% em GSM8K/MATH; RouteLLM (Ong 2024) — diversity reduz single-point-of-failure de 12% para 2% em outage scenarios; When Agents Disagree (mar/2026) — MoA-diverso vence Self-MoA em raciocínio com judge (0,810 vs 0,512 win rate).
Quem atende hoje os task types que eram do canal Grok (Sprints 11-15)?
Da Sprint 11 à 15, o adaptive_decomposer ativava o Grok quando classificava a task como realtime_search, social_listening, current_events, brand_monitoring, multi_perspective_decomposition ou long_context_synthesis. Pós-Sprint 16 os 6 task types continuam existindo, com donos novos: realtime_search, social_listening, current_events e brand_monitoring vão para o Sonar Pro (perplexity_fast, $3/$15) — cobre web live geral, sem o acesso à timeline X que a própria xAI descontinuou; multi_perspective_decomposition vai para Claude Sonnet 4.6; long_context_synthesis vai para Gemini 3.1 Pro (1M ctx, era 2M no grok_multi — perda documentada). _infer_task_type mantém as keywords PT-BR/EN específicas — “monitorar tempo real”, “trending”, “debate de múltiplas perspectivas”, “síntese de 500k tokens” — testadas ANTES das genéricas (research/analysis) para que a task certa caia no canal certo. FINOPS_DAILY_LIMITS[perplexity]=$40 e cap 50% governam o canal; RPM Perplexity subiu de 20 para 30 (burst 3) para absorver o tráfego de monitoring.
Como o circuit breaker funciona em produção?
Um breaker por provider (não por alias). Após 3 falhas consecutivas em qualquer task, o circuito abre por 90s — todas as próximas tasks da run que tentariam o provider raise CircuitBreakerError em <100ms e caem para o próximo da fallback chain instantaneamente. Após 90s, vai para HALF_OPEN: 1 sucesso fecha (CLOSED), 1 falha reabre. O registry é singleton, então o sinal é compartilhado cross-task na mesma run. Pós-Sprint 16, o breaker cobre os 5 providers canônicos (Anthropic, OpenAI, Google, Perplexity, xAI). Cada provider alimenta um KPI provider_health no .kpi_history.jsonl — auditoria histórica de quem derrubou o pipeline na semana.
Por que Opus saiu de primary em code e review, e por que review voltou para Anthropic na Sprint 13?
Diagnóstico nos 10 runs até a Sprint 8 mostrou que Opus pegava só 3,7% das tasks por contagem mas concentrava ~60% dos custos (uma única task crítica chegou a $0,668). Gemini 2.5 Pro tem 1M context, raciocínio comparável e custa ~1/15 de Opus. Para code padrão, Gemini venceu o trade-off. Para review, a Sprint 9 promoveu Groq Heavy a primary (sub-segundo + diversifica provider). Em 19-mai-2026 a Sprint 13 reavaliou review especificamente — bateria E2E mostrou que Claude Sonnet 4.6 supera Groq Heavy em qualidade editorial PT-BR (rubrica de 5 dimensões aplicada a copy denso) e que precisávamos garantir Anthropic em planos COMPLEX (cobertura subia de 4/5 para 5/5 quando review é Sonnet). Groq Heavy ficou como fallback de review e primary em code_review e extraction até a Sprint 16, quando saiu do roteamento: code_review foi promovido a Sonnet 4.6 (fallback GPT-5.5 — upgrade deliberado de ~10x num gate de qualidade), extraction migrou para Gemini Flash a custo neutro e o fallback de review passou a Gemini Flash. Opus 4.8 segue primary em critical_review/architecture abaixo do tier frontier — onde cada ponto de qualidade extra justifica o custo (pricing oficial $5/$25 corrigido na Sprint 15).
O que mudou na Sprint 10 (bateria 360) e o que ela protege?
A bateria 360 executou ping + doctor + finops + plan + run + board em sequência e expôs 6 bugs entre crítico e baixo. O mais sério: Sonnet 4.6 começou a devolver dependencies como list de dicts ([{task_id:t1}]) em vez de strings, quebrando _parse_plan inteiro com Pydantic ValidationError. Outros: AVG_COST_PER_CALL[perplexity] $0,008 estava 6x abaixo da medição real ($0,05/call em sonar-deep-research), o calibrator rejeitava amostras boas; PROVIDER_SHARE_CAP[perplexity] 0,50 deixava research dominar 84% do wall time — reduzido para 0,35. Também: cli.py aggregator consolidou gemini_flash em gemini e groq_heavy em groq nas tabelas; Gemini split runtime via GEMINI_MODEL env permite cair para Flash em janelas de outage 503 sustentado do tier Pro. Resultado: 223 passed + 1 xfailed = 100% effective, coverage 53%.
O que é o cap por provider e como ele difere do cap por nome?
O cap antigo aplicava por alias (claude, claude_sonnet, claude_haiku contavam separadamente), o que deixava Anthropic somar facilmente 90%+ do plano. O novo cap é por família — Anthropic = Fable + Opus + Sonnet + Haiku somados, Google = Pro + Flash somados, Perplexity = Sonar Deep + Sonar Pro somados. PROVIDER_SHARE_CAP em src/config.py pós-Sprint 16: anthropic 45%, openai 45%, google 60%, perplexity 50%. O Google recebe o cap mais alto porque herdou o bulk ex-Groq (classification/summarization/extraction + judge). Invariante de outage testado: a soma dos caps menos qualquer provider individual >= 1.40 — qualquer plano fecha mesmo com um provider inteiro em outage. FinOps diário: Anthropic $100 · OpenAI $50 · Google $60 · Perplexity $40, teto global $230.
Posso usar o orquestrador em produção sem temer custos descontrolados nem outages?
Sim — cinco camadas de proteção: (1) pre_check de budget bloqueia antes de iniciar se a estimativa ultrapassa BUDGET_LIMIT (default $15); (2) cap por provider (4 famílias) impede concentração total mesmo quando o budget está disponível; (3) tier interno Claude (Opus → Sonnet → Haiku) e Gemini split Pro/Flash reduzem custo até 95% para tarefas low/medium-complexity; (4) circuit breaker + redistribuição cross-provider + diversity guarantee em COMPLEX tornam o pipeline resiliente a outage sustentado de qualquer provider individual; (5) FINOPS_DAILY_LIMITS por provider são teto absoluto diário. Run #7 com Anthropic em 102% do limite diário: 11/11 tasks completas, $0,07, sem falha — fallback chain redirecionou tudo automaticamente.
Como integro em CI/CD?
Três pontos nativos. (1) cli.py doctor --strict retorna exit 1 em qualquer check ATENÇÃO/CRÍTICO — ideal como gate de pipeline. (2) cli.py serve sobe HTTP /health (200/503) e /metrics — pollable por load balancers e k8s liveness probes. Reporta saúde dos 5 providers. (3) cli.py dashboard --html gera HTML auto-contido com Chart.js para deploy em qualquer servidor estático. Bearer token opcional via GEO_HEALTH_TOKEN protege os endpoints. Provider em circuit OPEN aparece em /health como degraded. Sprint 13 também adicionou UX em tempo real no stdout (wave preview + OK por task) — útil para logs estruturados em CI.
O que está no backlog imediato (Sprint 17+)?
Três P0 baseados em papers 2025-2026: (1) topology-first routing (AdaptOrch fev/2026 arXiv:2602.16873) — decidir parallel/sequential/hierarchical/hybrid ANTES de escolher modelo, +12-23% sobre baselines; (2) difficulty-conditional depth (DAAO set/2025 arXiv:2509.11079) — substituir complexity score único por tupla (difficulty, n_subtasks, needs_judge, evidence_required, realtime_data), +11,21% accuracy com 64% do custo; (3) automatizar a bateria E2E manual da Sprint 13 em workflow CI semanal com artifact anexado (já valida os 5 providers, falta agendamento). Item ENTREGUE na Sprint 19 (09-07-2026): reintegração do xAI concretizada — Grok 4.5 (live X em social/brand) + Grok 4.20 Reasoning (multi_perspective), 5 providers / 11 modelos. Item ENTREGUE na Sprint 20 (09-07-2026): timeout resiliente e à prova de drift — corrigido bug latente onde o ConnectionPool congelava o read timeout do 1º chamador por provider (bandas por task_type viravam letra morta; research/architecture cortados no default), agora timeout POR-REQUEST no .post(); folga generosa nas bandas (research 600s, architecture/critical 720s), janela de contexto entre waves 2000→12000 chars, timeout adaptativo no retry, sentinela timeout_coverage no cli doctor e comando cli.py timeouts. Item ENTREGUE na Sprint 21 (09-07-2026): robustez para autonomia 24/7 via revisão CTO-Fable — escrita atômica dos state files (router/calibração/cache), cap de concentração re-verificado no redirect por budget, cache exact-only em copy/research, ConnectionPool.shutdown real e local Windows == CI (383 testes). Itens ENTREGUES nas Sprints 22-23 (09/10-07-2026): SDK call-level (B-019) — call_llm() herdando timeout/fallback/FinOps do pipeline, com o curso-factory consumindo em modo opt-in — e a inserção evidence-driven do GPT-5.6: Sol como code primary (AA Coding Agent Index 80) + julgador cross-family aditivo, Luna em 7 chains de volume, Terra fora (Pareto), parque de 13 modelos com 451 testes verde. Item ENTREGUE na Sprint 24 (10-07-2026): fechamento de loops — sinal duplo no router (0.30 de qualidade no score), record_feedback ligado (canal morto desde a Sprint 18), judge com consequência (entrega flagged + exit code 3), code verifier que executa o código gerado, cascata convergente, replan + abort (PlanCollapseError + exit code 4), breaker de qualidade com cooldown 6h e outer loops agendados — smoke real US$ 0,24 com 7/7 tasks e o Google fora do ar; 531 testes verde, parque intocado. P1: confidence-based cascading (FrugalGPT), role-aware context routing (RCR-Router), deploy do dashboard HTML em alexandrecaramaschi.com. P2: /metrics Prometheus, webhook de alerta, multi-tenant.
Pronto para orquestrar
13 LLMs canônicos em 5 providers — Anthropic, OpenAI, Google, Perplexity e xAI (reintegração Sprint 19; GPT-5.6 Sol e Luna somados na Sprint 23). GPT-5.6 Sol é o primary de code (AA Coding Agent Index 80) com Luna reforçando as chains de volume; GPT-5.5 + Opus 4.8 + Gemini 3.1 Pro formam o tier premium-only de copy; Fable 5 reservado a architecture e critical_review (tier frontier, Sprint 15) com Opus 4.8 de fallback imediato. Gemini 3.1 Pro em analysis, Claude Sonnet 4.6 em review e code_review, Sonar Pro (perplexity_fast) em realtime/social, QualityJudge em Gemini Flash com anti-self-judging, Perplexity com citations expostas (URLs/DOIs), diversity guarantee dinâmico min(plan_size, 4) em planos COMPLEX, cap por provider, audit com model_id e citations, governança FinOps automatizada e roadmap público atualizado a cada sprint. Open-source, sem lock-in.
por Alexandre Caramaschi — Chief Strategy Officer da Nuvini (Nasdaq: NVNI), Founder da Brasil GEO, cofundador da NAIA, ex-CMO da Semantix (Nasdaq), cofundador da AI Brasil