feat(telemetry): registra QUAIS chunks a busca devolveu (schema v19) - #26
Merged
Merged
Conversation
A telemetria v6 registra a FORMA de uma busca — quantos resultados, quanto tempo, se o semantic disparou — e não registra quais chunks voltaram. Isso responde "a busca está saudável?" e não responde "o que esta memória já serviu, de fato?", que é a pergunta sobre a superfície de recuperação: o que o agente realmente recebe. - `db.ts`: `top_chunk_ids` / `top_scores` no CREATE (install limpo) E como `ALTER TABLE` idempotente em `migrateToV9` (DB existente). Os dois caminhos falham separado, então são testados separado. - `search.ts`: serializa os pares depois de filtrar por `typeof id === "number"` — `id` é opcional em `SearchResult`, e mapear antes de filtrar desalinha as duas colunas (um `undefined` some de uma e o score correspondente fica na outra).⚠️ Limite de privacidade, deliberado: NÃO grava o texto cru da query. O comentário do v6 declara que "não armazenamos texto cru da query por privacidade"; `query_text` existe em alguns DBs por reconciliação de drift de schema, e existir não é autorização para escrever. O teste B1 lê o INSERT do fonte e falha se a coluna reaparecer. Testes: 4 novos, e os dois mutantes mordem os alvos certos — remover a chamada de `migrateToV9` derruba só A2 (A1 sobrevive pelo CREATE, que é o ponto); reintroduzir `query_text` derruba B1 e B2. Suíte completa 590/590 no node 22.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O quê
search_telemetryganhatop_chunk_idsetop_scores(schema v19). A telemetriav6 registra a forma de uma busca — quantos resultados, quanto tempo, se o
semantic disparou. Não registra quais chunks voltaram.
Por quê
A primeira pergunta responde "a busca está saudável?". A segunda responde "o que
esta memória já serviu, de fato?" — que é a pergunta sobre a superfície de
recuperação, o conjunto do corpus que algum dia chega ao agente. Sem os ids não
dá para medir cobertura, concentração, nem quanto do corpus nunca foi exposto.
Não grava o texto cru da query. O comentário do v6 em
db.tsdeclara que"não armazenamos texto cru da query por privacidade". A coluna
query_textexiste em alguns DBs por reconciliação de drift de schema — e existir não é
autorização para escrever.
query_hashsegue sendo a única representação daquery.
O teste B1 lê o
INSERTdireto do fonte desearch.tse falha sequery_textreaparecer na lista de colunas. Guarda mecânico, não convenção.
Ids de chunk são rowids internos de conteúdo que o operador já possui; a string
da query é o único campo que pode carregar as palavras de um terceiro.
Dois detalhes que não são óbvios
ALTER TABLEsó na migração deixa o install limpo sem a coluna;CREATEsó no caminho novo deixa o DB existente sem ela. A1 cobre um, A2 cobre o outro.
idé opcional emSearchResult. Mapear antesde filtrar desalinha as colunas: o
undefinedsome detop_chunk_idse oscore correspondente permanece em
top_scores— e o par deixa de ser um par.Como testei
telemetry-per-chunk.test.ts), 4/4 verdes.migrateToV9⇒ só A2 falha (A1 sobrevive peloCREATE, que é exatamente o ponto de separá-los);query_textnoINSERT⇒ B1 e B2 falham.tsclimpo).