User story
Como o worker de coleta, eu quero mandar o digest que analisei e não mandar produção individual por
pessoa, para que a idempotência funcione e a centralização não mude a condição de coleta por efeito
colateral.
Acceptance criteria
--refs-digest
A flag que desliga o author_velocity
Por que a segunda flag existe
O metrics.json carrega uma chave que junta identidade e produção individual: author_velocity, que
traz por pessoa o nome, o e-mail, os commits, as linhas por semana e o percentual de commits com
trailer de IA (iris/analysis/author_velocity.py, iris/reports/writer.py:55). É a única com essa
forma — varridos iris/analysis, iris/metrics, iris/reports e iris/platform, nenhum outro módulo
emite e-mail.
O CLAUDE.md lista "individual developer ranking, scoring, or productivity tracking" como não-objetivo
permanente e exige quatro condições para telemetria subir — "parsed locally, identity discarded at
the edge, only aggregates uploaded, repo/team grain with k-anonymity", fechando com "anything short of
all four stays out". A chave falha em duas: a identidade não é descartada na borda, e o que sobe não é
agregado no grão de repositório.
O argumento é de alcance: no caminho local a emissão é opt-in por máquina e alcança só o que cada
pessoa instalou; centralizar sem desligar a estenderia aos 598 repositórios da organização, sem ação de
ninguém.
Scope / non-goals
Fora: tirar a chave do engine inteiro. Se ela deve sair, é decisão do Iris e fica registrada no DD
como possibilidade futura, não como pedido.
Se encaixa em qual estágio?
Stage 2 — Ingestion: reliability of CLI → /api/ingest pipeline, e Princípio #2 (nunca ranquear
indivíduos).
Implementation notes
O push_metrics de hoje monta repository, window_days, remote_url, cli_version, github_user e
active_users — sem o campo novo a idempotência da §3.2 não existe. O active_users carrega nome e
login do GitHub, sem e-mail e sem número por pessoa, e continua sendo enviado.
O ingestSchema da rota usa .passthrough(), então esta issue pode ser mergeada antes da rota
persistir o campo, sem quebrar nada.
Links
User story
Como o worker de coleta, eu quero mandar o digest que analisei e não mandar produção individual por
pessoa, para que a idempotência funcione e a centralização não mude a condição de coleta por efeito
colateral.
Acceptance criteria
--refs-digestpush_metricsA flag que desliga o
author_velocitymetrics.jsonnão traz a chaveauthor_velocityPor que a segunda flag existe
O
metrics.jsoncarrega uma chave que junta identidade e produção individual:author_velocity, quetraz por pessoa o nome, o e-mail, os commits, as linhas por semana e o percentual de commits com
trailer de IA (
iris/analysis/author_velocity.py,iris/reports/writer.py:55). É a única com essaforma — varridos
iris/analysis,iris/metrics,iris/reportseiris/platform, nenhum outro móduloemite e-mail.
O
CLAUDE.mdlista "individual developer ranking, scoring, or productivity tracking" como não-objetivopermanente e exige quatro condições para telemetria subir — "parsed locally, identity discarded at
the edge, only aggregates uploaded, repo/team grain with k-anonymity", fechando com "anything short of
all four stays out". A chave falha em duas: a identidade não é descartada na borda, e o que sobe não é
agregado no grão de repositório.
O argumento é de alcance: no caminho local a emissão é opt-in por máquina e alcança só o que cada
pessoa instalou; centralizar sem desligar a estenderia aos 598 repositórios da organização, sem ação de
ninguém.
Scope / non-goals
Fora: tirar a chave do engine inteiro. Se ela deve sair, é decisão do Iris e fica registrada no DD
como possibilidade futura, não como pedido.
Se encaixa em qual estágio?
Stage 2 — Ingestion: reliability of CLI →
/api/ingestpipeline, e Princípio #2 (nunca ranquearindivíduos).
Implementation notes
O
push_metricsde hoje montarepository,window_days,remote_url,cli_version,github_usereactive_users— sem o campo novo a idempotência da §3.2 não existe. Oactive_userscarrega nome elogin do GitHub, sem e-mail e sem número por pessoa, e continua sendo enviado.
O
ingestSchemada rota usa.passthrough(), então esta issue pode ser mergeada antes da rotapersistir o campo, sem quebrar nada.
Links