code-metrics
/octopus:code-metrics roda uma leitura local de como seu branch move um
catálogo de métricas determinísticas de qualidade — estrutura, dívida,
legibilidade, decay e risco de carga — antes de você abrir o PR, e continua
quase de graça a menos que algo de fato regrida.
O que resolve
Quem introduz uma regressão de qualidade costuma ser o último a descobrir: a review deixa passar uma complexidade crescente, uma queda de dois pontos na cobertura ou um novo ciclo de import, e um dashboard só mostra a tendência muito depois do merge. Este comando move a leitura para o momento em que você ainda pode corrigir barato, e a mantém barata computando os números com o tooling do seu próprio stack em vez de um modelo.
Como funciona
Um adapter por-stack — escolhido a partir do stack detectado — roda o tooling
real e normaliza a saída para um contrato compartilhado. Além das métricas de
estrutura da v1 (cobertura, complexidade, tamanho de módulo, ciclos de
dependência) ele agora lê contadores de dívida e legibilidade (contagens de
TODO/supressões, profundidade de aninhamento, nº de parâmetros, magic numbers,
doc coverage), hotspots (churn × complexidade) e um proxy estático perf_risk
(só info). O comando faz fetch do baseline por-merge no ref
octopus/code-metrics e imprime um delta duplo: seu branch vs. esse baseline
(a tendência) e vs. seu main local (o impacto deste PR).
Os thresholds são ratchet por padrão (sem regressão vs. baseline), com alvos
absolutos opcionais no .octopus.yml. A rodada numérica nunca chama um modelo;
só uma quebra de threshold aciona um modelo de baixo custo para explicar a
regressão e sugerir um fix. perf_risk é só-info e nunca vira gate.
Uso & parâmetros
octopus code-metrics [--stack <id>] [--metric <name>] [--verbose] [--emit-baseline]--stack <id>— força um adapter de stack (csharp,typescript) em vez de auto-detectar a partir do repo.--metric <name>— reporta uma única métrica em vez do catálogo todo.--verbose— mostra a saída crua do tooling junto do resumo.--emit-baseline— imprime obaseline.jsonplano desta rodada (usado pela writer-Action).