OPS62-followup — CI: flake do municipalitiesWithoutUpdateTool.unit.spec.ts sob carga — ordenação Alpha/Beta trocada (2 ocorrências 2026-08-18) #81

Closed
opened 2026-08-19 00:41:12 +00:00 by fsolla · 3 comments
Owner
id depends serializes priority
OPS62-followup
59
P3

Classe de flake ambiental (máquina compartilhada; ver S6) mas com 2 ocorrências no mesmo dia (gate local 19:22 e run 779 do main 23:53): 'orders never-updated first (by name), then oldest to newest (by name as tie-break)' recebeu [Beta, Alpha] no lugar de [Alpha, Beta]. O código é puro e determinístico (localeCompare 'pt-BR' + tie-break por timestamp ISO em getMunicipalitiesWithoutUpdate.ts) e 20 runs isolados passam; a ordem recebida é a ordem original do fixture (sort não atuou), o que sugere algo no ambiente do vitest sob concorrência (workers/forks), não na lógica. Gatilho para investigar: 3ª ocorrência. Se persistir, reproduzir com a suíte full em máquina sob carga e checar locale/ICU do container. Nada a ver com o OPS62 (que não toca src/); o flake existia antes e só foi observado 2x no mesmo dia.

--- id: OPS62-followup depends: [59] serializes: [] priority: P3 --- Classe de flake ambiental (máquina compartilhada; ver S6) mas com 2 ocorrências no mesmo dia (gate local 19:22 e run 779 do main 23:53): 'orders never-updated first (by name), then oldest to newest (by name as tie-break)' recebeu [Beta, Alpha] no lugar de [Alpha, Beta]. O código é puro e determinístico (localeCompare 'pt-BR' + tie-break por timestamp ISO em getMunicipalitiesWithoutUpdate.ts) e 20 runs isolados passam; a ordem recebida é a ordem original do fixture (sort não atuou), o que sugere algo no ambiente do vitest sob concorrência (workers/forks), não na lógica. Gatilho para investigar: 3ª ocorrência. Se persistir, reproduzir com a suíte full em máquina sob carga e checar locale/ICU do container. Nada a ver com o OPS62 (que não toca src/); o flake existia antes e só foi observado 2x no mesmo dia.
fsolla added the
ready
label 2026-08-19 00:41:13 +00:00
fsolla added
in-progress
and removed
ready
labels 2026-08-19 15:28:34 +00:00
Author
Owner

Claimed by agent run at 2026-08-19T15:28:35.038Z. Lock otimista: outro claim deve falhar e re-rodar pnpm agent:claim.

Claimed by agent run at 2026-08-19T15:28:35.038Z. Lock otimista: outro claim deve falhar e re-rodar `pnpm agent:claim`.
Author
Owner

PR #89 (base main, Ready): causa raiz reproduzida — o fixture do teste chamava Date.now() por chamada; duas daysAgo(40) separadas podiam cruzar a fronteira de ms sob carga (0.08% idle, 100% com pausa de 1 ms injetada; fixture ancorado: 0 em 2000 runs), deixando Alpha estritamente mais novo e vencendo o tie-break por nome em sortStale. Fix test-only: âncora fixtureNowMs no load do módulo + hoist do timestamp empatado (igualdade estrutural). Verificação: spec 30/30, unit 2405, int 791, gates verdes. Merge via safety net quando o CI rodar.

PR #89 (base main, Ready): causa raiz reproduzida — o fixture do teste chamava `Date.now()` por chamada; duas `daysAgo(40)` separadas podiam cruzar a fronteira de ms sob carga (0.08% idle, 100% com pausa de 1 ms injetada; fixture ancorado: 0 em 2000 runs), deixando `Alpha` estritamente mais novo e vencendo o tie-break por nome em `sortStale`. Fix test-only: âncora `fixtureNowMs` no load do módulo + hoist do timestamp empatado (igualdade estrutural). Verificação: spec 30/30, unit 2405, int 791, gates verdes. Merge via safety net quando o CI rodar.
fsolla added
done
in-prod
and removed
in-progress
labels 2026-08-19 16:17:04 +00:00
Author
Owner

Merged em main via PR #89 — done + in-prod. Deploy de produção segue o verificador ci.yml (gated).

Merged em main via PR #89 — `done` + `in-prod`. Deploy de produção segue o verificador `ci.yml` (gated).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: fsolla/teqo#81
No description provided.