Contexto por tarefa e relevância com Jev v2.
- Jev com rubrica v2 como padrão quando habilitado, gates opcionais e seleção por relevância.
- Respostas compactas, expansão do código original e outline de métodos.
- Novo atlas_context para editar, depurar, revisar ou entender.
- Histórico Git local na busca e no contexto de debug.
- Camada semântica opt-in, índice 2.3.0 e observabilidade de tokens.
Todos esses recursos integram a versão 3.0.0, preparada para lançamento em 15/10/2026. Jev é opt-in; ao ativá-lo, a rubrica padrão é a v2.
Detalhes da versão & guia de migração ↗Notas completas desta versão
Notas da versão 3.0.0, incluindo contexto por tarefa, Jev v2, entrega compacta e observabilidade. O changelog foi consolidado para o lançamento de 15/10/2026; as fontes técnicas preservam o snapshot usado na análise.
Relevância, entrega compacta e observabilidade
Added
-
Site de release notes da branch 3.0 com comparação rastreável à main, guia de migração do índice, configuração copiável do MCP e explicação do Jev, custos e fronteira de dados. Disponível em
docs/release-notes.html.
-
ATLAS_RELEVANCE_GATE=identifierdispensa o Jev para toda consulta que seja um identificador (reason=identifier_query). Opcional e desligado: no replay de 24/09, cortou as chamadas de 28 para 13, mas baixou o MRR de 0,613 para 0,569 e subiu os tokens de metadados em 32%, porque essas consultas perdem o corte e a rubrica v2.
Changed
-
Site do Atlas recriado com a identidade visual, tipografia e logos do CodeSteer, narrativa sobre contexto do repositório e navegação responsiva. A documentação técnica completa permanece disponível em
docs/documentacao.html. - Guia de primeiros passos e documentação técnica alinhados à mesma identidade do site, com navegação compartilhada, diagramas na nova paleta e leitura responsiva de exemplos e tabelas.
-
Respostas compactas (
atlas_searcheatlas_contextno perfil compacto, eatlas_expand) só trazem o blocobudgetquando algo foi cortado para caber; o perfilfull,atlas_grapheatlas_briefnão mudam. No replay de 24/09 (v2 + corte), os metadados detop_k=5caíram de 9.933 para 6.879 tokens (−31%) e os detop_k=10de 14.163 para 11.100 (−22%); os cenários com expansão, de 24.184 para 21.123 (−13%), com os mesmos 8 completos. -
Em
atlas_expand, classe com mais de 6.000 caracteres e métodos indexados abre como cabeçalho +outline(métodos comref,symbol,typeelines);next_refsegue o corpo inteiro eATLAS_EXPAND_OUTLINE=0desliga.StorageBackendfoi de 4.819 tokens na primeira página (19.065 inteira) para 1.965, eASTChunkerde 4.528 (13.453) para 1.433. -
A rubrica default do Jev passa a ser a v2: 4 níveis concretos com
whateexamples, instruções que admitem consulta em português ou identificador, ekind/languageno estado de cada candidato.ATLAS_RELEVANCE_RUBRIC=v1volta à rubrica anterior;atlas_status.relevance.rubricdeclara a versão. Os limiares viram frações do nível mais alto da escala. No replay de 24/09 (top_k=10, com o corte), o MRR foi de 0,500 para 0,613, linguagem natural de 0,073 para 0,312 e os cenários completos de 7 para 8. A v2 custa ~2,3× por chamada (~US$ 0,001 por busca comtop_k=10). Validado fora da amostra, com o Jev de verdade em 38 consultas novas (holdout): MRR 0,697 contra 0,507 do ranking local e 0,558 da v1 emtop_k=10, com 39% menos tokens e nenhum alvo perdido. -
Uma chamada ao Jev leva o pool inteiro: o teto por requisição passa de 24 KB para 192 KB, abaixo do limite do modelo. Com
top_k=10, a v1 fazia 2 chamadas sequenciais. -
Com o Jev ligado, o perfil compacto faz do
top_kum teto: entre ostop_kprimeiros na ordem Jev, sai quem tem score abaixo da metade da escala (1,5 na v2, 1,0 na v1), sem repor a vaga nem cedê-la a commits. Exatos e candidatos sem avaliação ficam;omitted.relevanceconta os cortes eatlas_status.relevance.cutdeclara a política. É o default;ATLAS_RELEVANCE_CUT=0volta à seleção conservadora. Com as notas Jev de 24/09 reaplicadas no caminho de produção (v2), os metadados detop_k=10caíram 38% e os cenários com expansão 32%, sem perder alvo (estudo). -
AGENTS.mdé a única fonte das instruções de agente e da arquitetura;CLAUDE.mdapenas importa esse arquivo.
Fixed
- Explicação do Jev no site sincronizada com a rubrica v2, lotes de 192 KB, corte padrão do perfil compacto sem reposição e gates opcionais. O guia passa a mostrar a ativação com a fronteira de dados e o custo de API explícitos.
-
Com o Jev ligado, o pool chega ao Jev já na ordem do rerank lexical, e o candidato que ele não avalia com confiança fica nessa ordem, não mais na posição RRF crua. O cross-encoder continua só no fallback. No replay de 24/09, identificadores parciais voltam de MRR 0,400 para 0,781, e o total em
top_k=10vai de 0,375 para 0,496 (0,500 com o corte), acima dos 0,431 sem Jev. Sem Jev, o ranking não muda. - Orientação de expansão começa com uma ou duas refs e exige lacuna de evidência para abrir mais; continuações deixam de recomendar leitura integral automática.
-
atlas_expandrecupera o intervalo original do símbolo, inclusive conteúdo truncado no índice, validando hash e caminho. Respostas grandes oferecemnext_refsem cache, vinculado ao hash, e offsets de conteúdo; continuações após alteração do arquivo são rejeitadas. O harness segue as páginas e só contabiliza evidência completa após receber a cadeia inteira. - Avaliação pareada de expansão: 6/12 cenários completos contra 2/12 com conteúdo indexado; comparação inclui busca e expansões, sem chamadas Jev.
-
Orientação de ferramentas e agentes esclarece que
response_profile=fullsobrescreve a flag de compactação; chamadas normais devem omitir o parâmetro.
-
Perfil compacto usa
chunk_idcurto e mantém expansão de referências Base64 antigas, validando manifesto, hash atual e isolamento do workspace. A seleção considera o pool antes dotop_k, preserva incertos e exatos e usa fallback local quando tudo é rejeitado. Defaults e limiares Jev permanecem iguais. - Servidor e harness compartilham montagem e finalização; contadores de omissão entram antes do corte definitivo. Telemetria mede o texto retornado e distingue sucesso de processamento de mudança de ranking. Benchmark separa projeção, deduplicação e seleção e contabiliza expansões e evidências incompletas.
- Medição em 28 consultas: perfil compacto final reduziu 31,66% dos tokens de metadados e 12,21% com conteúdo, mantendo MRR/recall por classe sobre os mesmos candidatos (Jev desligado).
Added
-
ATLAS_RELEVANCE_GATEopt-in (default off) evita Jev para função, método ou classe de nome exato único no pool, mantendo promoção determinística do alvo. Configuração aparece no status e motivo de dispensa no ledger sem custo remoto. - Orientação de expansão seletiva (um ou dois símbolos por necessidade) e harness pareado de gate/expansão em lotes de 5, 2 e 1. Uma avaliação remota por consulta; custos contrafactuais separados dos reais, com parada em custo desconhecido. Avaliação pareada: 7,63% menos tokens em metadados com gate e lote dois, com mais chamadas de expansão; métricas de qualidade iguais entre variantes, com lacunas explicitadas por classe.
-
Perfil compacto de contexto (
ATLAS_CONTEXT_OPTIMIZATION, default False):atlas_searcheatlas_contextaceitamresponse_profile(default|compact|full). No compacto: projeção enxuta comrefde expansão, deduplicação conservadora por cobertura de conteúdo, orçamento a 70% do teto vigente e, com Jev ligado, seleção que só remove candidatos com score ≤ 0,25 e confiança ≥ 0,90. Nova toolatlas_expandresolve até 5 refs por id no índice (sem embedding/Jev), valida hash do arquivo e path no workspace. Independente deATLAS_RELEVANCE. Exemplo MCP default OFF. -
Avaliador opcional de relevância Jev (
ATLAS_RELEVANCE, default False): quando ligado,atlas_searchenvia a consulta e os candidatos do pool pós-RRF à API System One do OpenRouter e reordena por evidência antes dotop_ke do orçamento existentes. Lotes de até 24 KB (máx. 2 chamadas, timeout compartilhado de 3 s); baixa confiança isola o candidato sem invalidar o lote. Falha de contrato ou timeout volta ao reranker local para o lote afetado. Cada busca emite uma linha JSON de custo em stderr (conhecido, parcialmente conhecido, zero sem chamada, ou desconhecido);atlas_status.relevancedeclara configuração sem rede.ATLAS_RERANK=0continua desligando toda reordenação. Modelo viaATLAS_RELEVANCE_MODEL(default~typesafe/jev-latest; pin versionadotypesafe/jev-1.13permanece aceito).probabilitiesde Score segue o contrato TypeSafe (chaves"0".."n-1"+legend). - Guia de primeiros passos em português, com configuração por editor, primeira busca e ajuda com erros comuns, acessível pelo README e pela documentação visual.
-
Observabilidade de tokens por consulta (
ATLAS_OBSERVABILITY=1, opt-in): mede a string JSON final devolvida poratlas_search,atlas_context,atlas_briefeatlas_graph— caracteres/bytes exatos e tokens (exatos via tokenizer local embarcado ouATLAS_TOKENIZER_PATH, com estimativaceil(chars/4)apenas se indisponível, identificada como tal). Evento v1 em memória (último por tool) e JSONL local com retenção limitada (.code-index/observability/events.jsonl, ≤3 MiB com rotação). Blocoatlas_status.observabilitysó aparece quando o flag está ligado. -
Teto global de resposta em
atlas_search(24.000 caracteres/bytes, 6.000 tokens exatos com tokenizer configurado): corte determinístico de resultados inteiros pela cauda, preservando ordem/identidade dos sobreviventes;truncated.resultsdeclara quantos foram removidos.atlas_context/atlas_brief/atlas_graphreaproveitam seus tetos de caracteres existentes e ganham o mesmo blocobudget(mode,max_chars,max_bytes,max_tokens,tokenizer_sha256,used_chars) na resposta. -
scripts/eval_search.py --delivery: mede MRR/recall@5 da resposta REALMENTE ENTREGUE (pós-montagem e pós-orçamento) nos modos metadata/content, sobre os mesmos candidatos do ranking pré-budget — nunca altera a medição histórica.--benchmarkmede o overhead de observabilidade (desligada / estimativa / tokenizer local) sobre payloads sintéticos fixos. -
Dependência direta
tokenizers>=0.22.2,<0.23(já transitiva via fastembed). -
Tokenizer padrão embarcado: SmolLM2-135M (Apache-2.0, revisão e SHA-256 fixos) incluído no pacote, carregado de forma preguiçosa, sem download em runtime.
ATLAS_OBSERVABILITY=1basta para registrar contagem exata segundo essa referência;ATLAS_TOKENIZER_PATHsubstitui o padrão. Eventos identificam origem (bundled/custom), nome, revisão e hash, sem registrar paths. Os limites de tokens das respostas passam a valer por padrão mesmo com o registro desligado; falha no recurso/override degrada para estimativa e limite por bytes. A contagem não representa faturamento do modelo cliente.
Fixed
- Corrigidos os 13 erros de tipagem reportados pelo mypy nos contratos de links Markdown, grafo, histórico e status. O fallback de sampling fora de workers AnyIO agora aceita objetos awaitable além de corrotinas nativas.
-
Wikilinks Obsidian com caminho de vault (
[[meta/glossary#termo]]) passam a resolver a partir dos arquivos indexados (sufixo a partir da raiz da vault), em vez de concatenar no diretório da nota de origem.#headingvira arestalinks_tono nósectioncorrespondente e preencheresolved_section; se o heading não existir, a aresta cai nodoc. Alvo inexistente continua sem nó fantasma;[[nota]]/[[nota|alias]]e.//../não mudam. -
budget.used_charsagora representa o comprimento real do JSON final devolvido (antes era calculado antes de o próprio valor ser gravado, ficando sempre uma medição defasada). Em produção o campo é montado pelo finalizador compartilhado (response_budget.finalize_response), que substitui o bloco parcial quecontext.pymonta para seus chamadores diretos (ex.: testes). -
background_reindex.logpassa a ter teto de 256 KiB: o spawn recorta o final do arquivo antes de appendar o run novo, para o log de reindex em background não crescer sem limite.
Contexto por tarefa, semântica e histórico Git
Corte major: Fase 1 omitida do 2.2.0, mais as camadas 4 (semântica opt-in) e 5 (arqueologia de Git). Sem flag nova para a história: a janela é constante (GIT_HISTORY_MAX_COMMITS_PER_FILE / GIT_HISTORY_MAX_MONTHS). Watcher, SCIP, rerank e o braço estrutural já estão em [2.2.0].
Added
-
atlas_context— pacote da tarefa em uma chamada (target+intent∈edit/debug/review/understand), com tetoCONTEXT_RESPONSE_MAX_CHARS. Substitui encadearatlas_graph+atlas_briefquando o símbolo já é conhecido. -
atlas_graph(mode="affected")— raio de impacto por BFS reversa. Um commit é história, não dependência:affectedehubsignoram nóscommite arestastouches(não entram no grau). -
Camada semântica opt-in (
semantic.py), ligada só comATLAS_SEMANTIC=1. Cadeia de origem: sampling MCP síncrono →ATLAS_SEMANTIC_LOCAL_URL→ATLAS_SEMANTIC_API_URL.ATLAS_SEMANTIC_API_KEYvai só no header;ATLAS_SEMANTIC_MODELtroca o payload paramodel+messages(OpenAI-compatible / OpenRouter). Sem origem, o índice estrutural permanece completo.atlas_status.semanticdeclaraenabled,origin,egress,indexelast_generation. Warnings de busca:semantic_layer_unavailableesemantic_arm_unavailable(vector+FTS seguem disponíveis). -
Arqueologia de Git (local, sem env). A indexação lê a janela do repositório e publica
.code-index/history.json+ tabelacommits_*.atlas_searchpode devolver hitstype="commit"/language="git".atlas_context(intent="debug")projetasections.recent_history(commits ligados portouches). Degradação declarada:git_history_unavailable,git_history_partial,git_history_stale,git_history_empty.atlas_indexreportagit_history_status,git_history_commitsegit_history_touches.
Changed
-
CURRENT_INDEX_VERSIONpassa de2.2.0para2.3.0(campospurpose/purpose_hash/purpose_vectore sidecarsemantic.json).MIN_INDEX_VERSIONcontinua2.0.0: índices 2.0.x–2.2.x seguem buscáveis. Converter para 2.3.0 exigeatlas-index --fullsem--paths— recorte incremental não mistura schemas.