Execucao de verificacao de copy-trading (2026-07-10)
Verificacao completa do trabalho restante de copy-trading — tudo abaixo realmente executado, nao apenas autoria.
Ao vivo (contas demo cTrader reais) — 8/8 passam
1:1 · 1:many · reverse · cross-cID · partial-close · pending limit + cancel · trailing stop · token-refresh.
Cenarios live adicionados RunPendingAsync / RunTrailingAsync (+ LoadSpotPriceAsync, OpenPositionSnapshot.StopLoss/TrailingStopLoss).
Integracao (Postgres real, Testcontainers) — passa
CopyNodeAffinityTests— reclaim atomic real do supervisor: primeiro no reclama todos os perfis em execucao, segundo reclama 0 (sem double-copy); pause libera + reclama.TokenRotationSignatureTests— assinatura muda somente em rotacao real de token.
In-cluster (kind + Helm) — passa
Instalado kind/kubectl/helm, executou scripts/k8s-e2e.sh contra cluster kind real:
- Job Deterministic: 101 passou in-cluster.
- Job Live: 8 passou in-cluster (init-container
seed-secretscopia Secret → emptyDir gravavel, contas demo reais). - Job
Complete 1/1, script exit 0.
Bugs encontrados durante verificacao (corrigidos + re-verificados)
- Eventos pendentes: cTrader anexa placeholder de Posicao nao-aberta a ordem pendente resting limit/stop
ORDER_ACCEPTED/CANCELLED.SourceExecutionsAsyncagora classifica placement/cancel como evento de ordem antes do branch de posicao, mas permite que fill de limit/stop (ex. stop-loss-triggered close) caia no caminho de fechamento. - Refresh tokens de uso unico: cTrader gira refresh token a cada atualizacao. Cache somente leitura que nao pode persistir se auto-invalida. Job K8s live copia Secret em emptyDir gravavel; Job padrao para suite deterministica.
SaveTokensagora best-effort. Simbolos live forçados para FX (BTCUSD trailing amendments broker-rejected). - Nomenclatura de imagem de script corrigida para corresponder ao split
registry/repositorydo Helm +pullPolicy=Never.
Programa de espelhamento avancado + ciclo-de-vida-de-token + escala (2026-07-10) — tiers deterministicos passam
Programa de acompanhamento adiciona filtragem de tipo de ordem, copia de vencimento de ordem pendente, slippage de faixa de mercado / stop-limit, toggles de copia SL/TP, troca de token no local harmonica (um token valido por cID), simulador fiel a cTrader, lease de no auto-cicatrizante, arquivo unificado de dev-credentials.
- Unidade — 210 passou (
dotnet test tests/UnitTests). Nova cobertura de copia: filtro de tipo de ordem (abertura + pendente), slippage de espelhamento de faixa de mercado + preco base, copia de vencimento on/off, slippage stop-limit, alteracao pendente, iniciar-com-mestre-aberto, desconectar→mestre-negociou→reconectar ressincroniza (abertura faltante + fechamento orfao), troca de token no local (sem reinicio), invalidade cross-cID, invariantes de dominio, propriedade de lease, bump de token-version. - Integracao (Postgres real, Testcontainers) — passa:
CopyNodeAffinityTests(reclamacao atomica, sem double-copy, liberacao de pause, reclam de lease expirado por outro no),TokenRotationSignatureTests(assinatura muda em bump de token-version),OpenApiAuthorizationPersistenceTests(TokenVersion persiste + incrementa em atualizacao). - E2E (
tests/E2ETests): viagem de opcao de destino agora asserta filtro de tipo de ordem, copia-expiracao, slippage de copia junto com ciclo de vida completo. - Build: limpo sob
TreatWarningsAsErrors;get_file_problemsdo Rider limpo em arquivos alterados.
Cenarios live (contas demo cTrader reais) para pending-stop, faixa de mercado, expiracao, iniciar-com-aberto,
rotacao de token mid-run autoria contra mesmo motor; executa com
secrets/dev-credentials.local.json unificado por dev-credentials.md.
Follow-up conhecido
Execucao live in-cluster girou token de uso unico; regenere cache local com
CMIND_ONBOARD=1 dotnet test tests/E2ETests --filter FullyQualifiedName~OnboardingTests
(cTrader acelerou sua pagina OAuth bem apos a execucao — tente novamente quando limpar).