3.01.196 - Cap. 10 com referência integral do config; MANUAL_CONFIGURACAO_COMPLETO_* viram redirecionamento; build/deploy/spec com 3 PDFs.
3.01.195 - ROBOT:: Single complete manual per language: chapter 10 = full config reference; MANUAL_CONFIGURACAO_COMPLETO_* are redirect stubs; PDF pipeline and deploy ship 3 MANUAL_COMPLETO PDFs only; malange.spec bundles MANUAL_COMPLETO MD + stubs.
3.01.194 - Conversão PDF inclui MANUAL_CONFIGURACAO_COMPLETO PT/EN/ES; build_linux e deploy ZIP/CI copiam 6 PDFs; malange.spec embute docs/MANUAL_CONFIGURACAO*.md (resumo + referência integral).
3.01.193 - Capítulo «Referência integral» (PT/EN/ES), filtros filtrar_ativos/ignorar_ativos, catálogo/sinais, tabelas Martingale/SOROS/Masaniello; MANUAL_COMPLETO_* e MANUAL_CONFIGURACAO.md apontam para a referência; versão 3.01.192.
3.01.191 - Comentarios alinhados ao build real; piso 100MB mantido.
3.01.190 - 70MB foi limite incorreto sem base no historico; 55MB ainda podia bloquear 50MB.
3.01.189 - O build valido ~59MB falhava no limite de 70MB e impedia FTP/WhatsApp.
3.01.188 - ROBOT:: PyInstaller: hidden imports alinhados ao pacote strategies; aiohttp/telegram opcionais; talib condicional; build_linux/build_windows exit 1 em falha; deploy_desktop_full e build_and_deploy_desktop validam tamanho mínimo dos executáveis.
3.01.186 - ROBOT:: Corrige Padrão 23 (M1): API obtida de malange/__main__; loop principal dispara análise na janela 10–50s em minutos múltiplos de 5.
3.01.186 - ROBOT:: Padrão 23 (M1): _bot_api/_broker_datetime em pattern_strategies; loop principal M1 aciona análise na janela minuto %5==0 e seg 10–50 (estrategia 26).
3.01.185 - CLOUD:: Webhook prioriza pending; cancel limpa ID Asaas e chama API; checkout limpa IDs em canceled antigos.
3.01.184 - CLOUD:: Webhook PAYMENT_RECEIVED: localiza assinatura por asaas_subscription_id priorizando pending > active/trialing > canceled (evita prorrogar registro cancelado). Cancelamento na interface: cancela na ASAAS quando configurado e zera asaas_subscription_id. Novo checkout: remove asaas_subscription_id de outras linhas canceled do mesmo usuário.
3.01.183 - CLOUD:: Lembrete e-mail 2 dias antes do vencimento (malange:subscription-renewing-soon-notify, 08:15); active/past_due; renewal_reminder_email_sent_at; fila; pt/en/es; limpa flag no pagamento Asaas ou extensão admin.
3.01.181 - Restaura applyPadrao23Strategy de malange_original em pattern_strategies (timing 5m, sleep, refresh candles, cor da vela).
3.01.180 - ROBOT:: Padrão 23 (M1): restaura lógica de malange_original (minuto múltiplo de 5, seg 10–50, espera ~54s, refresh de candles, CALL/PUT na cor da primeira vela; doji sem sinal). Remove implementação por faixa 20%/80% nas últimas 23 velas.
3.01.179 - CLOUD:: Renovação: desconto = max(cupom no preço atual, discount_applied_cents da assinatura vencida); nova linha com coupon_id legado quando existir; checkout resolveCheckoutDiscount com subscription_coupon_id.
3.01.177 - CLOUD:: Asaas: GET /customers?email= ao receber 404 no PUT/GET ou falha no POST; reassocia cliente existente na conta antes de falhar (ID antigo inválido mas e-mail já cadastrado).
3.01.175 - CLOUD:: CouponService: use App\\Models\\User (resolveRenewalPromo não pode usar User no namespace Services).
3.01.173 - CLOUD:: Assinatura vencida: banner + CTA Renovar; desconto do mesmo plano sem redigitar cupom (campanha/cupom ainda válidos); validate ignora usedBy na renovação; recordUsage só na 1ª compra.
3.01.171 - CLOUD:: Asaas: log HTTP (status, body_snippet, json); retry PUT/GET/POST; cliente 404 limpa asaas_customer_id e recria; alertas com put/get; UI 401/403 (asaas_api_auth_failed).
3.01.169 - CLOUD:: Checkout Asaas: sincroniza CPF/CNPJ em cliente já existente (PUT + fallback GET); log `Checkout assinatura: falha na ASAAS`; mensagem específica para CPF; link PIX/boleto antes do INSERT local; cancela na Asaas se não houver URL; retries em getFirstPaymentLink.
3.01.167 - Documentação em docs/ versionada; comentário no .gitignore reforça que PDFs de deploy (manuals_pdf/) não entram no repo
3.01.166 - Defaults em config.sample.txt (entrada_invertida, alma_*); config_demo alinhado; schema e ShareModal com alma_/entrada_invertida no mapeamento
3.01.165 - ROBOT+CLOUD:: negativar_em_loss (AJUSTES): blacklist por cada LOSS individual até próxima catalogação; config.sample, Cloud, manuais PT/EN/ES.
3.01.163 - Assinaturas igual a Usuários: só Link e subsState; sem busca/campo pesquisa; backend só sort/order.
3.01.162 - Assinaturas com prop subsState para evitar conflito; Usuários com ordenação por coluna (Link + usersState).
3.01.161 - Users sem ordenação/busca de novo; Assinaturas com listFilters restaurado para funcionar.
3.01.160 - Troca listFilters por usersPage e subscriptionsPage para evitar conflito com Vue; ordenação e busca por e-mail mantidas.
3.01.159 - Users.vue reescrito com mesma estrutura de Subscriptions.vue; evita variável filters no template.
3.01.158 - Props users/listFilters com defaults; userList e pagination via computed; evita crash se dados inesperados.
3.01.157 - Prop 'filters' conflita com Vue; renomeada para listFilters em Users e Subscriptions.
3.01.156 - Ordenação por colunas e pesquisa por e-mail nas páginas admin de usuários e assinaturas; ordenação por e-mail em assinaturas via subquery.
3.01.163 - CLOUD:: Assinaturas reescrita como Usuários: só Link + subsState, sem ref/watch/busca; backend só sort/order.
3.01.162 - CLOUD:: Admin: Assinaturas usa prop subsState (em vez de listFilters); Usuários ganha ordenação por colunas via Link + usersState.
3.01.161 - CLOUD:: Reverte Admin: Users volta ao original (sem ordenação/busca); Subscriptions mantém listFilters e funcionalidades.
3.01.160 - CLOUD:: Admin Users/Subscriptions: props listFilters → usersPage / subscriptionsPage (evita conflito Vue).
3.01.159 - CLOUD:: Admin Users: reescrito espelhando Subscriptions.vue (mesma estrutura); botão Limpar com (listFilters && listFilters.search).
3.01.158 - CLOUD:: Admin Users: props defensivas (users/listFilters com defaults), userList e pagination via computed para evitar crash.
3.01.157 - CLOUD:: Corrige página em branco em /admin/users: prop "filters" renomeada para "listFilters" (conflito com Vue).
3.01.156 - CLOUD:: Admin: usuários e assinaturas com ordenação por colunas (e-mail, robôs, status, etc.), pesquisa por e-mail; assinaturas ordenam e-mail por subquery (corrige ordenação).
3.01.155 - Parâmetros max_win_consecutivo e max_loss_consecutivo na seção AJUSTES: limite de wins/losses consecutivos por operação; 0=ilimitado; ao atingir encerra sessão com motivo apropriado; config.txt, interface web e export/import.
3.01.154 - ROBOT+CLOUD:: max_win_consecutivo e max_loss_consecutivo (AJUSTES): limite de wins/losses consecutivos por operação; 0=ilimitado; ao atingir encerra sessão com motivo apropriado; config.txt, interface web e export/import.
3.01.153 - Botão excluir = ícone lixeira; Ver relatório = ícone olho; removido link Ver status; coluna PnL mais larga (valor não truncado).
3.01.152 - CLOUD:: Sessões: botão excluir = ícone lixeira; Ver relatório = ícone olho; removido Ver status; coluna PnL mais larga (sem truncar).
3.01.151 - Após excluir sessão, redireciona para a URL atual via ?redirect= em vez de back(); evita 404 em /sessions.
3.01.150 - CLOUD:: Após excluir sessão, redirecionamento explícito via ?redirect= (evita 404 em /sessions).
3.01.149 - Coluna PnL fixa à direita para resultado financeiro sempre visível; link Excluir sessão trocado por botão com ícone X.
3.01.148 - CLOUD:: Coluna PnL fixa à direita (sempre visível); botão excluir sessão vira ícone X.
3.01.147 - Coluna Ações fixa à direita e scroll horizontal nas tabelas de sessões para o botão excluir permanecer visível.
3.01.147 - CLOUD:: Coluna Ações fixa à direita e scroll horizontal nas tabelas de sessões (botão excluir sempre visível).
3.01.146 - Botão excluir sessão nas páginas de sessões (todas e por robô), visível e permitido apenas para usuários ADMIN.
3.01.145 - CLOUD:: Botão excluir sessão nas páginas de sessões (todas e por robô), visível e permitido apenas para usuários ADMIN.
3.01.144 - Corrige confluência SAFE_KELTNER para bloquear entrada quando preço está fora dos canais; considera max/min da vela; inclui params Keltner no confluence_params do fluxo principal.
3.01.143 - ROBOT:: Corrige confluência SAFE_KELTNER: só permite entrada com preço dentro dos canais de Keltner; considera max/min da última vela; inclui keltner_periodo/deslocamento/media e fractal/donchian no confluence_params do fluxo principal.
3.01.142 - Atualização automática de versão
3.01.141 - Webhook ASAAS tenta recuperar assinatura automaticamente quando não existe localmente (recoverSubscriptionFromAsaas no AsaasService); comando subscription:recover-from-asaas refatorado para usar o serviço; doc atualizada.
3.01.141 - CLOUD:: ASAAS webhook: auto-recuperação de assinatura quando não encontrada (recoverSubscriptionFromAsaas no serviço).
3.01.140 - Atualização automática de versão
3.01.139 - Lista completa de estratégias em estrategias.txt, menu interativo do robô e configuração no Cloud (52 públicas).
3.01.138 - ROBOT:: + CLOUD:: Lista completa de estratégias: estrategias.txt com 52 públicas (0-51), opção 0 no Cloud, generate_strategies_list até 51.
3.01.137 - Corrige reconexão automática BROKER10 quando a conexão WebSocket é perdida (on_error/on_close e handler no malange).
3.01.136 - ROBOT:: Corrige reconexão automática BROKER10 ao perder conexão WebSocket (on_error/on_close e handler malange).
3.01.135 - Ajustes em release_notes.
3.01.134 - Ajustes em release_notes.
3.01.133 - Ajustes em release_notes.
3.01.132 - Ajustes em release_notes.
3.01.131 - ROBOT:: Declara alma_length, alma_sigma, alma_distribution_offset, alma_lenta, alma_rapida, alma_sinal como global em inicializar_variaveis e _reconfigurar_variaveis_dinamicas para evitar NameError no loop principal.
3.01.130 - ROBOT:: Adiciona parâmetro max_value em get_float (config_manager e config_manager_db) para evitar erro ao carregar alma_distribution_offset.
3.01.129 - Novas estratégias 49 ALMA, 50 ALMA 2, 51 ALMA Cross. Faixa de estratégias públicas ampliada para 1-90. CLOUD:: Mesmo mapeamento e seeder.
3.01.128 - ROBOT:: Indicador ALMA (pandas_ta) e confluências ALMA, ALMA2, ALMA_CROSS. CLOUD:: Opções ALMA na tela de configuração do robô.
3.01.127 - ROBOT:: Indicador ALMA (Arnaud Legoux MA) e confluências ALMA, ALMA2, ALMA_CROSS; CLOUD:: Opções ALMA na tela de configuração.
3.01.126 - CLOUD:: Relatório de sessão: valor bruto do banco para opened_at e header X-Timezone para fuso do usuário.
3.01.125 - CLOUD:: Relatório de sessão: usa valor bruto do banco para opened_at e header X-Timezone para exibir horários no fuso do usuário.
3.01.124 - CLOUD:: Relatório de sessão: horários das operações no fuso horário do usuário (cookie malange_timezone).
3.01.123 - CLOUD:: Relatório de sessão: horários das operações exibidos no fuso horário do usuário (cookie malange_timezone).
3.01.122 - Corrige escopo de entrada_invertida, ordem do log (estratégia antes de invertida), um único log de resultado; manuais atualizados.
3.01.121 - ROBOT:: Corrige escopo entrada_invertida; log primeiro estratégia depois invertida; um único log de WIN/LOSS. Manuais: documentar Entrada invertida.
3.01.120 - Opção Entrada invertida no robô (operar no sentido oposto à estratégia) e campo na página de configuração, bloco AJUSTES.
3.01.119 - ROBOT:: Opção Entrada invertida (operar CALL↔PUT oposto à estratégia). CLOUD:: Campo em AJUSTES.
3.01.118 - ROBOT:: Retorna None quando session_id é None no gerenciador de sessão
3.01.117 - CLOUD:: Restaura sessão como running antes de subir novo container no reinício
3.01.116 - ROBOT:: Zera check_websocket_if_connect em erro do WebSocket para forçar reconexão
3.01.115 - ROBOT:: Corrige encerramento por stop win percentual usando saldo inicial
3.01.114 - ROBOT:: Reverte alterações EMA Cross (lookback de 3 velas reduzia taxa de acerto)
3.01.110 - - Adiciona ping_interval (25s) e ping_timeout (10s) ao WebSocket de todas as APIs
3.01.106 - Made-with: Cursor
3.01.105 - - Corretoras: menciona 13 corretoras (IQ Option, Avalon, Broker10, Polarium, Exnova)
3.01.104 - Made-with: Cursor
3.01.103 - Made-with: Cursor
3.01.102 - - Remove GuestLayout para evitar conflito de z-index nos botões
3.01.101 - - Cria componente Welcome.vue com design moderno e responsivo
3.01.100 - Sessões HTTP não eram fechadas após consulta à API TTZ, causando
3.01.099 - Corrige valid_from de assinaturas criadas durante período de trial.
3.01.097 - Adiciona log de debug para investigar problema do botão criar robô
3.01.096 - Corrige botão Criar Robô não aparecendo após excluir robô.
3.01.093 - - Import: seal_* e fit_* gravados em AVANCADOS (parse e determineSection)
3.01.092 - - Campos seal_* em RobotWebController (AVANCADOS)
3.01.091 - - SEAL passa a ser estratégia 48 (visível em robô e Malange Cloud)
3.01.090 - Atualização automática de versão
3.01.089 - ROBOT:: PnL linha 2: um sinal antes da moeda (+R$ 585.37); percentual mantém sinal (+4.0%).
3.01.088 - Atualização automática de versão
3.01.087 - Atualização automática de versão
3.01.086 - ROBOT:: Cloud: +1 espaço antes do saldo na linha 1 (entre Conta e Saldo); padding final sem +1 para barra alinhada.
3.01.085 - Linha 1 +1 espaço antes da barra; linha 2 espaco_total -6 para placar menos à direita.
3.01.084 - ROBOT:: Cloud: linha 1 +1 espaço antes da barra; linha 2 espaco_total -6 (placar menos à direita).
3.01.083 - Atualização automática de versão
3.01.082 - clear_screen não propaga exceção; draw_interface com try/except no padding Cloud e erro logado em stderr sem derrubar o processo.
3.01.081 - ROBOT:: clear_screen sem raise; draw_interface com try/except no padding Cloud e sem propagar exceção (robô não cai no container sem TTY).
3.01.080 - Linha 1 preencher até content_width (visível); linha 2 espaco_total exato para barras alinhadas.
3.01.079 - ROBOT:: No Cloud: linha 1 preencher até content_width (comprimento visível); linha 2 espaco_total = content_width - 2 - win_len - pnl_len para barras alinhadas.
3.01.078 - CLOUD:: Cronómetro na mensagem de aguardar reinício do container (tempo restante até 1 min).
3.01.077 - Viewer Logs do Container com box_width=79 (81 cols) para linhas fecharem uma posição à direita.
3.01.076 - ROBOT:: No viewer Logs do Container usar box_width=79 (81 colunas totais) para linhas 1 e 2 fecharem na borda direita.
3.01.075 - No Cloud (MALANGE_EMOJI_DOUBLE_WIDTH=1) usar + e - em vez de 🟢/🔴; deltas zerados e alinhamento estável.
3.01.074 - ROBOT:: No Malange Cloud (MALANGE_EMOJI_DOUBLE_WIDTH=1) usar indicadores ASCII (+/-) em vez de 🟢/🔴; deltas=0 e alinhamento estável nos Logs do Container.
3.01.073 - Linha 1 excede 2–3 caracteres no viewer; usar DELTA_LINE1=3. Linha 2 excede 1; manter delta=2.
3.01.072 - ROBOT:: Viewer Cloud: linha 1 usa DELTA_LINE1=3 (excede 2–3 chars), linha 2 mantém delta=2 (excede 1); barra direita alinhada.
3.01.071 - Reverte fórmula espaco_total da linha 2 para a anterior; max(0) e cap em winrate_padding para layout não quebrar.
3.01.070 - ROBOT:: Linha 2: reverte espaco_total para box_width - win_len - loss_len - ...; max(0) e cap em winrate_padding para evitar layout quebrado.
3.01.069 - Linha 2 usa espaco_total = content_width - 2 - win_len - pnl_len - delta para comprimento total exato e barra direita alinhada.
3.01.068 - ROBOT:: Linha 2: espaco_total = content_width - 2 - win_len - pnl_len - delta para comprimento total exato e barra direita alinhada.
3.01.067 - Linhas 3 e 4: mesmo delta espaços antes do │ e padding reduzido para barra direita alinhada nas 4 linhas.
3.01.066 - ROBOT:: Linhas 3 e 4: reduzir padding por delta e adicionar delta espaços antes do " │" para barra direita alinhada com linhas 1 e 2.
3.01.065 - Adicionar delta espaços antes do │ nas linhas 1 e 2 para todas as linhas terem o mesmo comprimento e barra direita vertical.
3.01.064 - ROBOT:: Linhas 1 e 2: adicionar EMOJI_DISPLAY_WIDTH_DELTA espaços antes do " │" para manter mesmo comprimento que linhas 3 e 4; barra direita vertical alinhada.
3.01.063 - Delta=2 no padding das linhas 1 e 2 (viewer renderiza emoji em 2 colunas); barra │ direita deixa de ser sobrescrita.
3.01.062 - ROBOT:: No viewer Logs do Container usa delta=2 (em vez de 1) no padding das linhas 1 e 2 para a barra │ direita não ser sobrescrita pelo conteúdo.
3.01.061 - Viewer renderiza emoji em 2 colunas; reaplicar -1 no padding das linhas 1 e 2 para não exceder a borda.
3.01.060 - ROBOT:: Reaplica delta emoji no padding das linhas 1 e 2 (viewer Cloud) para conteúdo não exceder uma coluna.
3.01.059 - Remove delta emoji do padding das linhas 1 e 2; barras verticais direitas ficam alinhadas com as linhas 3 e 4.
3.01.058 - ROBOT:: Linhas 1 e 2 do bloco status: padding completo no viewer Logs do Container (sem delta emoji) para barras verticais direitas alinhadas.
3.01.057 - Atualização automática de versão
3.01.056 - No viewer Logs do Container usa largura fixa 78 para as 4 linhas coincidirem com 80 colunas e eliminar espaço à direita nas linhas 3 e 4.
3.01.055 - ROBOT:: No viewer Logs do Container (MALANGE_EMOJI_DOUBLE_WIDTH=1) usa box_width fixo 78 para as 4 linhas coincidirem com 80 cols e alinhar linhas 3 e 4.
3.01.054 - Viewer renderiza emoji em 2 colunas; sem a variável o conteúdo excede a largura. Reativa injeção no orquestrador e compose.
3.01.053 - CLOUD:: Reativa MALANGE_EMOJI_DOUBLE_WIDTH=1 no orquestrador e compose; viewer renderiza emoji em 2 colunas, evita overflow nas linhas 1 e 2.
3.01.052 - Viewer Logs do Container usa 1 coluna para emoji; variável causava gap. Remove injeção para alinhamento correto.
3.01.051 - CLOUD:: Remove MALANGE_EMOJI_DOUBLE_WIDTH do orquestrador e docker-compose; viewer Logs do Container usa 1 coluna, alinhamento correto.
3.01.050 - Atualização automática de versão
3.01.048 - Atualização automática de versão
3.01.047 - Atualização automática de versão
3.01.046 - Atualização automática de versão
3.01.045 - Atualização automática de versão
3.01.050 - ROBOT:: Ao reconectar por MALANGE_SESSION_ID, bot verifica se sessão está running; se encerrada (Parar), inicia nova sessão em vez de reconectar.
3.01.049 - CLOUD:: status() e statusData() não tratam mais "updated_at recente" como running; só proteção restart_protected_until. Evita UI mostrar Parar/logs quando container não existe (429).
3.01.048 - CLOUD:: stop() só marca sessão como stopped se Docker estiver acessível; evita sessão parada com container ainda rodando (job na queue sem Docker).
3.01.047 - CLOUD:: stop/restart usam getCurrentSessionForRobot (mesmo critério do status: running + fallback 15 min); Parar e Reiniciar deixam de retornar "No running session" após primeiro restart.
3.01.046 - CLOUD:: restart/executeRestart: fallback recupera sessão marcada stopped na janela de proteção (updated_at 15 min + restart_protected_until); segundo reinício deixa de retornar "No running session".
3.01.045 - CLOUD:: ORPHAN_RECOVERED não fecha sessões com restart_protected_until no futuro; CheckRobotStuckJob e StopRobotJob respeitam janela de proteção (evita "No running session" após reinício).
3.01.044 - executeRestart não marca sessão como error ao 503; status() e statusData() usam sessão updated_at 15 min quando não há running.
3.01.043 - status() NUNCA persiste session como stopped; sessão fica running no DB, statusData() retorna sessão e painel não perde o robô.
3.01.042 - Short-circuit e rede de segurança também por updated_at 15 min; isSessionProtectedFromStop 15 min; cobre replica lag e race.
3.01.041 - Corrige falha de integridade ao importar por link (hash canônico) e exibe mensagens de erro no idioma da interface (PT/EN/ES).
3.01.041 - CLOUD:: Corrige importação por link compartilhado (hash canônico) e mensagens de erro no idioma da interface (PT/EN/ES).
3.01.040 - Corrige exportação payout_medio para config.txt: 87% ou 1.87 exportam como 1.87
3.01.040 - CLOUD:: Corrige exportação payout_medio para config.txt: 87% ou 1.87 exportam como 1.87 (evita 1.02 quando valor já vinha em odds).
3.01.039 - Aplica proteção (cache + restart_protected_until) logo após criar o container; segundo restart e polling durante 45s ficam protegidos.
3.01.038 - Retorna running=true no início de status() se sessão em janela de proteção; rede de segurança antes do return final.
3.01.037 - Proteção de restart persistida em sessions.restart_protected_until para todos os workers; acumuladores deixam de sumir após reconexão. Migration + Model + OrchestratorController.
3.01.044 - CLOUD:: executeRestart não marca sessão error ao retornar 503; status() e statusData() fallback: sessão updated_at 15 min quando não há running.
3.01.041 - CLOUD:: status() NUNCA persiste session como stopped; sessão fica running no DB, statusData() retorna sessão e painel não perde o robô.
3.01.040 - CLOUD:: Reinicializar robô: short-circuit e rede de segurança também por updated_at 15 min; isSessionProtectedFromStop 15 min; cobre replica lag e race.
3.01.039 - CLOUD:: Reinicializar robô: proteção (cache + restart_protected_until) aplicada logo após criar o container, antes do sleep(45); segundo restart e polling durante 45s ficam protegidos.
3.01.038 - CLOUD:: Reinicializar robô: status() retorna running=true no início se restart_protected_until no futuro; rede de segurança antes do return final.
3.01.037 - CLOUD:: Reinicializar robô: proteção persistida no DB (restart_protected_until em sessions) para todos os workers verem; acumuladores deixam de sumir após reconexão.
3.01.036 - CLOUD:: Fix PHP parse error em isSessionProtectedFromStop (condição linha 81).
3.01.035 - CLOUD:: Reinicializar robô – revisão completa: helper isSessionProtectedFromStop; 404 sempre tenta container_id do cache; fallback listar só por label; nunca marcar stopped quando protegida.
3.01.034 - CLOUD:: status() retorna running=true quando inspect ok mas container não Running (protegido/updated_at recente).
3.01.033 - CLOUD:: Reinicializar robô: status() retorna running=true quando sessão protegida por restart (404 ou sem container_id); reattach por cache ao 404.
3.01.032 - ROBOT:: Alinhamento do bloco superior (emoji condicional, duração HHH:MM). CLOUD:: Variável MALANGE_EMOJI_DOUBLE_WIDTH=1 injetada no container pelo orquestrador e no docker-compose.
3.01.031 - ROBOT:: Alinhamento bloco superior (emoji via env, duração HHH:MM); CLOUD:: MALANGE_EMOJI_DOUBLE_WIDTH no orquestrador e docker-compose.
3.01.029 - ROBOT:: Reverte alterações de alinhamento/pipe na interface moderna; estado original (local correto).
3.01.028 - Atualização automática de versão
3.01.026 - ROBOT:: Pipe: emojis restaurados; -1 espaço nas linhas Saldo/PnL para evitar overflow no viewer.
3.01.025 - Indicador +/- em vez de emoji no pipe para alinhamento nos logs do Cloud; box 80 cols.
3.01.025 - ROBOT:: Pipe: indicador +/- em vez de emoji nos logs do Cloud para alinhamento (sem scroll horizontal).
3.01.023 - Aumenta timeout e tempo de espera do restart do robô para evitar falha quando o container já aparece.
3.01.023 - ROBOT:: Pipe: box 82 colunas para viewer de logs do Cloud.
3.01.022 - ROBOT:: Pipe: box 80 colunas fixas para alinhar no viewer de logs do Cloud.
3.01.022 - CLOUD:: Aumenta timeout e tempo de espera do restart: backend 45s após criar container, set_time_limit(120), frontend 120s; mensagem "até 1 minuto" (PT/EN/ES).
3.01.021 - Corrige cálculo do bloco do meio da linha 2 nos logs do Cloud.
3.01.020 - ROBOT:: Corrige cálculo do bloco do meio (linha 2) da interface nos logs do Cloud.
3.01.019 - Alinhamento da interface moderna nos logs do Cloud; local inalterado.
3.01.018 - ROBOT:: Alinhamento da interface moderna nos logs do Cloud (emoji 2 colunas em pipe); local mantém fórmula original.
3.01.017 - Exibe tipo da conta com expiração (ex: REAL/M1) no cloud desde o primeiro draw; preenche expiration_time ao ativar interface e ao iniciar sessão.
3.01.016 - ROBOT:: Exibe Conta DEMO/M1 ou REAL/M1 no cloud desde o primeiro draw; preenche expiration_time ao ativar interface e ao iniciar sessão.
3.01.016 - CLOUD:: Página Avaliações Trial (/admin/trial-evaluations) usa AdminLayout: menu admin e tema dark/light.
3.01.015 - CLOUD:: Página robôs: remove botão Parar; Iniciar (verde) só quando parado, Status (roxo) só quando rodando; cores Compartilhar/Configurar/Sessões com maior contraste.
3.01.014 - Cache restart_protected 15 min; status() e CleanOrphanRobotContainersJob não fecham sessão nem param container nessa janela.
3.01.013 - CLOUD:: Restart: proteção 15 min (cache restart_protected); status() e job não fecham sessão nem param container nessa janela.
3.01.012 - Seeder preenche operações antigas com expiration_time (sessão), strategy_name (estratégia da sessão) e confluences (config do robô).
3.01.011 - Corrige label de expiração: timeframe no config está em segundos (60=M1), não em minutos.
3.01.010 - Enviar expiration_time em todas as chamadas update_bot_data para exibir REAL/M5 na interface.
3.01.009 - Botão Reiniciar robô e rota de restart apenas para admins até o fluxo estar estável.
3.01.009 - CLOUD:: Botão Reiniciar robô visível apenas para admins; backend retorna 403 para não-admin.
3.01.008 - Remove use Throwable; usar \Throwable no catch.
3.01.007 - Exnova API: timeouts em websocket/send_ssid/timesync, close() seguro com join limitado.
3.01.006 - Migrations repetem em lock timeout (6 tentativas, 55s); ignoram se coluna já existir.
3.01.005 - Migrations de expiration_time usam INPLACE/LOCK=NONE para evitar timeout de lock em produção.
3.01.004 - ROBOT:: Log instrument_id da Capitalbear em DEBUG para não poluir o console.
3.01.003 - Expiração (M1/M5) em sessão e operações; exibe DEMO/M5 na interface e relatório; seeder de backfill só atua em registros com os 3 campos NULL.
3.01.002 - ROBOT+CLOUD:: Expiração (M1/M5) em sessão e operações; exibe DEMO/M5 na interface e relatório; backfill seeder só em registros com os 3 campos NULL.
3.01.002 - Atualização automática de versão
3.01.002 - Atualização automática de versão
3.00.301 - Graça 10 min; não parar container se sessão do robô foi atualizada com esse container_id nos últimos 10 min.
3.00.300 - CLOUD:: CleanOrphanRobotContainersJob: graça 10 min e não para container se sessão do robô foi atualizada com esse container_id nos últimos 10 min.
3.00.299 - Restart retorna sessionStats para preencher PnL/Vitórias/Derrotas Sessão na hora; cache start em andamento e retry ao listar containers; acumuladores da sessão na interface após restart.
3.00.298 - CLOUD:: Restart retorna sessionStats; cache start em andamento + retry ao listar containers; acumuladores da sessão preenchidos na interface após restart.
3.00.297 - Trata erro "Connection is already closed" na Exnova com retry automático e mensagem amigável (PT/EN/ES).
3.00.296 - ROBOT:: Trata erro "Connection is already closed" na Exnova: retry automático na API e mensagem amigável (PT/EN/ES).
3.00.294 - CLOUD:: Inclui estratégia 47 (FIT) no dropdown de estratégias na tela de configuração do robô.
3.00.295 - CLOUD:: Inclui estratégia 47 (FIT) no dropdown de estratégias na tela de configuração do robô.
3.00.294 - ROBOT:: EXNOVA reconexão: timeouts em start_websocket, send_ssid, timesync, balance_id e get_balances; close() com join limitado; reinício da API em thread com timeout 30s para evitar robô congelado.
3.00.293 - Fechar só sessões órfãs (container_id antigo/null); nunca a que já tem o novo container_id (evita robô sumir da interface).
3.00.292 - CLOUD:: ORPHAN_RECOVERED: fecha só sessões órfãs (container_id antigo/null); nunca a que já tem o novo container_id (evita sumir da interface).
3.00.291 - Cache malange:restart_robot evita status() marcar sessão stopped durante restart; frontend não limpa sessão 30s após restart; statusData usa query explícita Session.
3.00.290 - CLOUD:: Restart: cache malange:restart_robot evita status() marcar CONTAINER_GONE durante janela; frontend não limpa sessão 30s após restart; statusData usa query explícita Session.
3.00.289 - Session stopped após restart: status() prioriza sessão que já tem container_id; guarda 5min em INSPECT_NOT_RUNNING; logs para rastreio.
3.00.288 - CLOUD:: Session stopped após restart: status() prioriza sessão que já tem container_id (evita fechar sessão reconectada); guarda 5min em INSPECT_NOT_RUNNING; logs ORCHESTRATOR_MARK_STOPPED para rastreio.
3.00.287 - CLOUD:: status() não marca CONTAINER_GONE se sessão updated_at <5min; job graça 5min e normaliza container_id.
3.00.286 - CLOUD:: CleanOrphanRobotContainersJob não para containers criados há menos de 2 min (evita matar container novo após restart).
3.00.285 - ROBOT:: Logs explícitos: ROBOT_ID e MALANGE_SESSION_ID no arranque; [SESSION] reconexão; [RESTART] sucesso/falha.
3.00.284 - CLOUD:: Status: retry list containers após 2s antes de CONTAINER_GONE; frontend atrasa refresh 5s após restart para evitar race.
3.00.283 - CLOUD:: Status: encerra sessão órfã (CONTAINER_GONE) quando container 404 sem container para reatar; reattach com ≥1 container; DatabaseSeeder inclui StrategiesSeeder.
3.00.282 - CLOUD:: Status: exibe mensagem "Aguardando inicialização do container…" durante o restart (PT/EN/ES).
3.00.281 - CLOUD:: Restart: backend aguarda 28s (após ciclo de retentativas do bot), set_time_limit(90); frontend timeout 90s para a requisição de restart.
3.00.280 - CLOUD:: Restart: backend aguarda 10s e verifica se o novo container segue em execução antes de retornar sucesso; retorna 503 com mensagem traduzida se o container tiver encerrado.
3.00.279 - ROBOT:: Restart: retentativas de reconexão à sessão existente (até 6 tentativas, 4s) para MySQL ainda não acessível no novo container; garante que reinício funcione.
3.00.278 - ROBOT+CLOUD:: Estratégia FIT (47) com parâmetros configuráveis (fit_ma_fast, fit_ma_slow, fit_signal); config.sample, Cloud parâmetros avançados e manuais PT/EN/ES.
3.00.277 - ROBOT+CLOUD:: Corrige robô órfão após restart: bot nunca cria sessão nova quando MALANGE_SESSION_ID está definido; aborta se não reconectar; backend encerra sessões running duplicadas ao reatar container.
3.00.276 - Parâmetro adx_maximo (padrão 100); ADX não recomenda compra nem venda quando valor > máximo; config, interface web e export/import.
3.00.275 - ROBOT+CLOUD:: Parâmetro adx_maximo (padrão 100); ADX não recomenda compra nem venda quando valor > máximo; config.txt, interface web e export/import
3.00.274 - CLOUD:: Admin: corrige cálculo de dias até expiração (dias corridos por startOfDay; trial ou ativa)
3.00.273 - Dias até expiração apenas na lista robôs em execução; exibe só o número entre parênteses.
3.00.273 - CLOUD:: Admin: dias até expiração só na lista robôs em execução, exibindo apenas o número entre parênteses
3.00.272 - Admin Robôs: dias até expiração da assinatura (e prefixo TRIAL) ao lado do e-mail do usuário
3.00.272 - CLOUD:: Admin Robôs: dias até expiração da assinatura (e prefixo TRIAL) ao lado do e-mail do usuário
3.00.271 - Admin Robôs: indicador de coroa ao lado do nome para assinantes pagos (não trial)
3.00.271 - CLOUD:: Admin Robôs: indicador de coroa ao lado do nome para assinantes pagos (não trial)
3.00.270 - CLOUD:: TtzService com cache 55s e timeout 5s para tradertimerzone.com; evita lentidão por timeouts DNS em produção
3.00.270 - CLOUD:: TtzService: cache 55s e timeout 5s para tradertimerzone.com; evita lentidão por timeouts DNS em produção
3.00.269 - ROBOT:: Release desktop empacota apenas MANUAL_COMPLETO_MALANGE_PT/EN/ES.pdf em build_linux, build_and_deploy e workflow CI.
3.00.268 - ROBOT:: Release desktop: empacota apenas os 3 manuais oficiais (PT, EN, ES) em build_linux e build_and_deploy
3.00.267 - Atualização automática de versão
3.00.266 - ROBOT:: Corrige exibição do nível Martingale na interface: mostra nível atual do ciclo (G1,G2,G3) em vez de 0 durante operações
3.00.265 - ROBOT:: build_package filtra manuais: apenas MANUAL_COMPLETO_MALANGE_* (evita empacotar MANUAL_CONFIGURACAO antigos)
3.00.264 - ROBOT:: Manuais PDF do release: conversor professional usa docs/ (atualizado); build_linux copia MANUAL_COMPLETO_MALANGE; aparência profissional
3.00.263 - ROBOT:: Remove vipsignals.txt do bundle e do versionamento (config de dev; usar config.sample)
3.00.262 - ROBOT:: malange.spec: remove config.txt do bundle (so config.sample.txt; config.txt e criado pelo usuario)
3.00.261 - ROBOT:: Guia TA-Lib para WSL (docs/INSTALAR_TA_LIB_WSL.md); build_linux.sh verifica TA-Lib
3.00.260 - ROBOT:: TA-Lib obrigatorio; guia docs/INSTALAR_TA_LIB_WINDOWS.md; build falha se ausente
3.00.259 - ROBOT:: malange.spec: talib opcional no Windows; mensagens ASCII evitam UnicodeEncodeError
3.00.258 - ROBOT:: build_windows.ps1 usa python -m PyInstaller para funcionar sem Scripts no PATH (Agendador de Tarefas)
3.00.257 - CLOUD:: Documenta confluências CHOP, Pearson e Stochastic nos manuais PT, EN e ES
3.00.256 - Migration atualiza apenas operações de sessões encerradas, nunca running
3.00.255 - Corrige operações com resultado NULL: migration atualiza órfãs para DRAW; bot fecha órfãs no shutdown; trata SIGTERM
3.00.255 - ROBOT+CLOUD: Operações com resultado NULL corrigidas; migration atualiza órfãs para DRAW; bot fecha órfãs no shutdown e trata SIGTERM
3.00.246 - CLOUD: Job diário 5:30 expira trials vencidos; Admin assinaturas com ordenação, per_page e paginação controlável
3.00.245 - Job a cada 5 min encerra containers órfãos (robôs rodando sem sessão ativa na interface).
3.00.245 - CLOUD: Job a cada 5 min encerra containers órfãos (robôs rodando sem sessão ativa na interface).
3.00.244 - Contagem de níveis MARTINGALE só após primeira entrada com perda; SOROS só após primeira entrada com ganho; display 0 = primeira entrada.
3.00.243 - ROBOT: Contagem de níveis MARTINGALE só após primeira entrada com perda; SOROS só após primeira entrada com ganho; display mostra 0 = primeira entrada.
3.00.242 - Evita duplicata PENDING+ACTIVE; recover-from-asaas cancela pending do usuário; comando subscription:cancel-pending-duplicates para corrigir casos atuais.
3.00.242 - CLOUD: Evita duplicata PENDING+ACTIVE; recover-from-asaas cancela pending do usuário; comando subscription:cancel-pending-duplicates
3.00.241 - CLOUD: Corrige assinatura PENDENTE quando cliente paga na ASAAS (ENUM status sem 'pending'); migration idempotente + comando subscription:recover-from-asaas
3.00.240 - ROBOT+CLOUD: Horários de sessão gravados em UTC; relatório e listas exibem em horário local; corrige Fim com hora incorreta
3.00.239 - ROBOT+CLOUD: Horários de sessão gravados em UTC; relatório e listas exibem em horário local do usuário; corrige Fim com hora incorreta
3.00.238 - Adiciona script para gerar tabela consolidada de stop loss mínimo (eventos x vitórias)
3.00.237 - Evita logs duplicados causados por auto-discovery do Laravel; BCC oculta em todas as mensagens configurável via MAIL_BCC_ADDRESS
3.00.236 - SubscriptionService garante uma assinatura ativa/trialing por usuário; migration deduplica existentes; Register, Auth, GoogleAuth e malange:assign-trial refatorados
3.00.235 - Exibe nível máximo atingido (MASANIELLO/MARTINGALE/SOROS) na interface e no relatório da sessão
3.00.233 - E-mail para trial vencendo, questionário de avaliação, cupom LAUNCH, contato WhatsApp/Telegram, painel admin de avaliações
3.00.232 - CLOUD: E-mail trial vencendo (questionário, cupom LAUNCH), job diário 8h, painel avaliações admin
3.00.231 - Cronômetro da página Status alinhado com logs do container via robot_started_at; em restart a sessão permanece
3.00.230 - Cronômetro da página Status alinhado com o exibido nos logs do container (robot_started_at); em restart a sessão permanece e o cronômetro não reinicia
3.00.229 - Página Status do robô: remove ID do container, adiciona cronômetro HH:MM:SS e PnL Hoje no fuso horário local do usuário
3.00.228 - Status do robô: remove ID do container, adiciona cronômetro de duração da sessão (HH:MM:SS), PnL Hoje no timezone local do usuário
3.00.227 - Salva corretora escolhida no config para não perguntar novamente na próxima execução
3.00.226 - Permite valor da entrada, stop win e stop loss em percentuais na configuração interativa
3.00.225 - - deploy_desktop_full.ps1: log completo (deploy_full_*.log), ErrorAction Continue
3.00.224 - - build_and_deploy_desktop.py: prioriza v2, paths /api/v2/, aviso backup na mensagem WhatsApp
3.00.223 - Ao carregar do sample (config.txt ausente), remove corretora da configuração
3.00.222 - Importação substitui totalmente a configuração preexistente; corrige problemas reportados pelos usuários
3.00.221 - Admin Robôs: ícone fullscreen na área do título abre tabela em tela cheia com coluna Confluências após Estratégia
3.00.220 - Admin Robôs: coluna ID à esquerda em ambas as tabelas
3.00.219 - Admin Robôs: coluna Gerenciamento exibe níveis entre parênteses (ex: MARTINGALE (4), MASANIELLO (6))
3.00.218 - Admin Robôs: ícone de olho para ocultar/mostrar colunas nome e email (privacidade)
3.00.217 - Orquestrador: reata sessão ao container em execução (label) quando container_id 404 ou vazio - robô volta a aparecer na interface
3.00.216 - Corrige leitura dos parâmetros pl_* e sr_* em produção: fallback AJUSTES -> AVANCADOS no ConfigManagerDB
3.00.215 - O scale que escalava os stakes pelo valor_entrada podia amplificar os valores
3.00.214 - Valida existência da estratégia antes de gravar strategy_id na sessão.
3.00.213 - Corrige início/parada de robô pela lista web (rotas web e sessão).
3.00.212 - Estratégia 46 Lógica de Preço: config.txt pl_*/sr_*, Malange Cloud (menu, parâmetros, export/import), manuais atualizados
3.00.211 - Indicador de operação pendente na coluna PnL passa a ser círculo amarelo com P em vez de asterisco.
3.00.210 - Indicador TTZ pausado na página Admin Robôs: círculo vermelho com T quando filtro TTZ ativo e mercado fora da cor autorizada.
3.00.211 - Admin Robôs: operação pendente passa a ser indicada por círculo amarelo com P em vez de asterisco.
3.00.210 - Indicador TTZ pausado na página Admin Robôs (círculo vermelho com T quando mercado fora da cor autorizada).
3.00.209 - Comentário no código explicando que PDF e PNG usam a mesma captura; defeitos aparecem iguais.
3.00.208 - Evita recorte da metade inferior das letras na exportação; overflow visible, line-height e padding no clone.
3.00.206 - PDF em formato A4; PNG em alta resolução e layout de exportação legível (largura mín. 1200px, escala 4).
3.00.204 - Exportação PDF/PNG sempre em tema claro; corrige blocos escuros quando dark mode está ativo.
3.00.202 - Corrige exportação na Dashboard tratando oklab() além de oklch() (html2canvas não suporta).
3.00.200 - Corrige exportação PDF/PNG copiando cores computadas do original para o clone (evita parse de oklch pelo html2canvas).
3.00.198 - Corrige exportação PDF/PNG convertendo oklch para rgb no clone (html2canvas não suporta oklch do Tailwind v4).
3.00.196 - Exportar relatório de sessão e dashboard para PDF ou PNG a partir da interface web, preservando o visual.
3.00.194 - Atualização automática de versão
3.00.193 - Atualização automática de versão
3.00.192 - Atualização automática de versão
3.00.191 - Atualização automática de versão
3.00.190 - Atualização automática de versão
3.00.189 - Atualização automática de versão
3.00.188 - Inclui parâmetros RSI (zonas compra/venda), Keltner (tipo de média) e tendência na tela de configuração dos robôs.
3.00.186 - Atualização automática de versão
3.00.185 - Atualização automática de versão
3.00.184 - Adiciona logs de debug para o fluxo de envio de e-mail (reset de senha e qualquer e-mail) para suporte ao usuário
3.00.183 - Corrige erro 'An email must have a From or Sender header' quando MAIL_FROM_ADDRESS está vazio em produção
3.00.182 - Corrige conflito da propriedade subject no PasswordResetMail com Illuminate\Mail\Mailable (redefine redefinição de senha)
3.00.181 - Atualização automática de versão
3.00.180 - Cronômetro: sempre buscar duration_seconds na API quando tiver sessão (mesmo com started_at do arquivo/DB).
3.00.179 - Cronômetro após restart: API retorna duration_seconds; bot usa duração do servidor + delta local (independente do relógio do container).
3.00.178 - Atualização automática de versão
3.00.176 - Cronômetro: não travar em 00:00 quando relógio do container está atrás do servidor (fallback para contar a partir de agora).
3.00.180 - Cronômetro: sempre buscar duration_seconds na API quando tiver sessão (mesmo com started_at do arquivo/DB).
3.00.179 - Cronômetro após restart: API retorna duration_seconds; bot usa duração do servidor + delta local (independente do relógio do container).
3.00.177 - Cronômetro: fallback só quando atraso do relógio >1 min (evita zerar no restart com skew pequeno).
3.00.176 - Cronômetro: não travar em 00:00 quando relógio do container está atrás do servidor (fallback para contar a partir de agora).
3.00.175 - Incluir MALANGE_APP_URL no environment do serviço web para o orquestrador repassar ao container do robô. Config services e .env.example.
3.00.174 - Cronômetro: fallback de URL da API quando MALANGE_APP_URL não está no container (MALANGE_BASE_URL ou https://malangecloud.com.br). Inclui script de teste da API.
3.00.173 - Cronômetro: fallback via API Laravel quando MySQL e arquivo falham; MALANGE_APP_URL no container.
3.00.172 - Cronômetro: arquivo em /app/.session_started_at (fixo); logs ao gravar/carregar para diagnóstico.
3.00.174 - Cronômetro: fallback de URL da API quando MALANGE_APP_URL não está no container (MALANGE_BASE_URL ou https://malangecloud.com.br).
3.00.173 - Cronômetro: fallback via API Laravel (GET /api/bot/session-started-at) quando MySQL e arquivo falham; MALANGE_APP_URL no container.
3.00.172 - Cronômetro: arquivo em /app/.session_started_at (fixo); logs ao gravar/carregar para diagnóstico.
3.00.171 - Cronômetro após reinício: started_at persistido em arquivo no container (não depende do MySQL no restart).
3.00.170 - Cronômetro: retentativas ao buscar started_at no banco e conversão de timezone segura (reinício com env correto).
3.00.169 - Cronômetro: interface moderna consulta started_at a cada desenho via getter (corrige zerado após reinício).
3.00.168 - Cronômetro após reinício: definir session_id a partir de MALANGE_SESSION_ID antes de conectar ao banco para o fallback do started_at funcionar.
3.00.167 - Relatório de sessão emite datas em ISO UTC para o frontend exibir em horário local
3.00.165 - Cronômetro da interface moderna: fallback para buscar started_at do banco quando falha na inicialização (reinício).
3.00.165 - Cronômetro da interface moderna: fallback para buscar started_at do banco quando falha na inicialização (reinício).
3.00.164 - Robô travado passa a ser reiniciado em vez de parado; criado RestartRobotJob.
3.00.163 - Reverte heartbeat do bot para hora local; CheckRobotStuckJob compara em America/Sao_Paulo para evitar parada indevida.
3.00.162 - Heartbeat e updated_at da sessão em UTC para evitar parada indevida pelo CheckRobotStuckJob.
3.00.161 - Remove sinal de parada residual na entrada do loop; correções de cronômetro (negativo/UTC) e cursores no SessionManagerDB.
3.00.160 - Cronômetro da interface moderna usa início da sessão após reinício para manter duração alinhada.
3.00.159 - Página Status do robô exibe corretora e tipo de conta na seção Session Info (badge por tipo Real/Demo/Tournament); removido do cabeçalho. Novas chaves i18n robot_status_broker e robot_status_account_type.
3.00.158 - Manuais em PDF com parágrafos alinhados à esquerda e sem hifenização automática (text-align: left; hyphens: none).
3.00.157 - - Novo CheckRobotStuckJob: para sessões running sem heartbeat há 5 min
3.00.156 - Página Status exibe cor atual do TTZ quando o filtro Trader Timer Zone está ativo (facilita entender por que o robô não efetua entradas).
3.00.156 - Página Status: exibe cor atual do TTZ quando filtro Trader Timer Zone está ativo (facilita entender por que o robô não entra).
3.00.155 - Atualização automática de versão
3.00.154 - Asterisco antes do PNL para manter alinhamento; cor azul no light mode e amarelo no dark mode.
3.00.153 - Asterisco de operação pendente à direita do PNL em vez do W/L.
3.00.154 - Admin Robôs: asterisco de operação pendente antes do PNL (alinhamento); azul (light) / amarelo (dark).
3.00.153 - Admin Robôs: asterisco de operação pendente passa a aparecer à direita do PNL em vez do W/L.
3.00.152 - Corrige vírgula dupla nos JSON de locale (build Vite).
3.00.151 - Admin Robôs: coluna Gerenciamento (MARTINGALE/MASANIELLO/SOROS/MÃO FIXA); asterisco no W/L quando há operação pendente na sessão.
3.00.150 - Timestamps em d/m H:i e container max-w-6xl nas duas páginas de sessões.
3.00.148 - Página de todas as sessões acessível pelo menu, com coluna do robô.
3.00.146 - Página de sessões respeita dark mode em todo o layout (cards, tabela, textos e links).
3.00.144 - Na listagem de sessões, coluna STATUS exibe error_message quando o robô está parado e a mensagem está preenchida.
3.00.142 - Remove mensagens de debug do TelegramManager da tela do robô
3.00.141 - Corrige erro na confluência CHOP: result_text não definido quando retorna True
3.00.140 - Botão Reiniciar robô na página de Status só visível após saldo atual da conta ser preenchido (robô pronto).
3.00.139 - Bloco Estratégia antes de Parâmetros Avançados; blocos colapsados ao abrir a página.
3.00.139 - Config robô: bloco Estratégia antes de Parâmetros Avançados; blocos colapsados ao abrir a página.
3.00.138 - Adiciona campo Gale Oposto na seção Martingale da interface; novos robôs passam a ter inverter_gale, gale_oposto e somente_recuperacao gravados como N no banco.
3.00.137 - Adiciona Gale Oposto na interface Malange Cloud; defaults N para inverter_gale, gale_oposto e somente_recuperacao em robôs novos.
3.00.136 - Evita CALL às 10:58 com cruzamento das 10:53 (sinal já obsoleto, EMAs
3.00.135 - Corrige inversão de direção no martingale quando opção gale invertido está desligada; padrão de inverter_gale alterado para False em config_manager e config_manager_db.
3.00.134 - Corrige padrão de inverter_gale para False; martingale não inverte direção quando opção desligada (Malange Cloud).
3.00.133 - - ema_cross.py: quando velas[0].get('to') is None, usar velas[:-1]
3.00.132 - ENUM subscriptions.status inclui 'pending'; evita Data truncated ao criar assinatura.
3.00.131 - Fix: ENUM subscriptions.status inclui 'pending' (evita Data truncated ao criar assinatura).
3.00.130 - Cancela assinaturas antigas só após sucesso na ASAAS; evita cliente ficar canceled quando criação falha.
3.00.129 - Assinatura: cancela assinaturas antigas só após sucesso na ASAAS (evita cliente ficar canceled quando criação falha).
3.00.128 - Checkout com dark mode nos blocos e labels (fundo escuro e contraste legível).
3.00.127 - Checkout: dark mode nos blocos e labels (fundo escuro e contraste legível)
3.00.126 - - ema_cross.py: filtra velas por to <= now (última vela fechada)
3.00.125 - Assinatura exige CPF/CNPJ no checkout; validação oficial Módulo 11 (CPF/CNPJ); corrige erro ASAAS ao criar cobrança sem CPF.
3.00.124 - Assinatura: CPF/CNPJ obrigatório no checkout; validação Módulo 11 (CPF/CNPJ); corrige erro ASAAS "preencher CPF ou CNPJ do cliente"
3.00.123 - Atualização automática de versão
3.00.122 - Assinatura: permite efetivar no mesmo plano quando em trial (botão Efetivar assinatura no card do plano)
3.00.121 - Assinatura: permite efetivar no mesmo plano quando em trial (botão "Efetivar assinatura" no card do plano em trial)
3.00.120 - Exibe tipo de conta localizado (DEMO/TORNEIO) em pt-BR na interface web; publica alterações pendentes
3.00.119 - Exibe estratégia em execução e lista de confluências no centro do bloco superior da página de status (formato da interface Python).
3.00.118 - Status: exibe estratégia em execução e lista de confluências no centro do bloco superior (formato da interface Python)
3.00.117 - Corrige duração: usa timestamps Unix para evitar falhas de timezone/Carbon
3.00.116 - Corrige duração da sessão não exibida: fallback para duration_minutes, garante valor não negativo
3.00.115 - Exibe corretora e estratégia no relatório de sessão (trata nulo para sessões antigas)
3.00.114 - Exibe duração da sessão no relatório como HH:MM:SS em vez de minutos
3.00.113 - Adiciona traduções faltantes no relatório de sessão (report_pnl_evolution, report_timeline, report_time, report_level) em pt-BR e en-US
3.00.112 - Atualização automática de versão
3.00.111 - Exportação config.txt grava parâmetros avançados em [AJUSTES]; importação mapeia [AVANCADOS] para AJUSTES.
3.00.111 - Export config.txt: parâmetros avançados em AJUSTES (robô MALANGE não suporta bloco AVANCADOS); import mapeia [AVANCADOS] para AJUSTES
3.00.110 - Não sobrescreve corretora na importação de config.txt
3.00.109 - Atualização automática de versão
3.00.108 - Atualização automática de versão
3.00.107 - Atualização automática de versão
3.00.106 - Atualização automática de versão
3.00.105 - Manifest estava hardcoded em favicon.ico, ignorando splash.png. Restaurada lógica.
3.00.103 - Atualização automática de versão
3.00.102 - Chrome no celular exige PNG 192x192 e 512x512. Comando artisan gera automaticamente no entrypoint.
3.00.100 - Atualização automática de versão
3.00.099 - Atualização automática de versão
3.00.098 - Atualização automática de versão
3.00.097 - Atualização automática de versão
3.00.096 - Atualização automática de versão
3.00.095 - Atualização automática de versão
3.00.094 - Desabilita Importar Configuração e Lista de Sinais quando o robô está em execução
3.00.093 - Retomada de sessão: recupera Step do Masaniello e nível/acumulado do Martingale a partir das operações no banco.
3.00.092 - Retomada de sessão (reinício em CLOUD): recupera Step do Masaniello e nível/acumulado do Martingale inferidos das operações no banco.
3.00.091 - Armazena estratégia na sessão (Malange Cloud) para fins estatísticos.
3.00.090 - Alinha nomes web/bot (atriun, nyrion); remove Quotex e Exnie de todas as listas de seleção.
3.00.089 - Alinha nomes web/bot (atriun, nyrion); remove Quotex e Exnie de todas as listas de seleção.
3.00.088 - Remove fallback para IQOPTION quando broker não suportado (aborta robô); usa polarium na interface e aceita polariumbroker como alias no bot.
3.00.087 - Remove fallback para IQOPTION quando broker não suportado (aborta robô); usa polarium na web e aceita polariumbroker como alias no bot.
3.00.086 - Corrige versão - apenas PATCH deve ser incrementado.
3.03.001 - Ícone personalizável via splash.png, nome do app configurável via APP_SHORT_NAME.
3.02.003 - Corrige SyntaxError (name used prior to global declaration).
3.02.002 - Corrige SyntaxError em malange.py: remove global API duplicado (name used prior to global declaration).
3.02.001 - Disponibiliza opção de instalar o app (ícone na área de aplicativos com acesso direto à aplicação web).
3.01.000 - Lista de corretoras na tela de edição da configuração do robô passa a vir do backend (igual à tela de criação).
3.00.081 - Idioma e Payout mínimo sempre na mesma linha na seção AJUSTES.
3.00.079 - Nota de release para retomada de contadores da sessão no modo CLOUD.
3.00.078 - Modo CLOUD: ao reiniciar o container, o robô detecta sessão em aberto e carrega do banco os contadores (WIN, LOSS, PnL, saldos) para a interface moderna bater com o painel web.
3.00.077 - Corrige layout da seção AJUSTES - cada campo (valor entrada, stop win, stop loss, filtrar ativos, ignorar ativos) ocupa linha inteira.
3.00.075 - Botão Reiniciar robô na tela de Status com confirmação; reinicia o container mantendo a sessão (útil quando o robô trava).
3.00.074 - Botão "Reiniciar robô" na tela de Status ao lado do Auto-scroll: confirmação do usuário e restart do container mantendo a sessão (útil quando o robô trava)
3.00.073 - Melhora detecção de perda de conexão com a corretora: heartbeat periódico no modo cloud, timeout em get_balance na verificação, verificação proativa a cada 2 min
3.00.072 - Melhora detecção de perda de conexão: heartbeat periódico no modo cloud (session.updated_at); timeout em get_balance na verificação de conexão; verificação proativa a cada 2 min (ping com timeout) para detectar WebSocket zumbi.
3.00.071 - Idioma e Payout mínimo na mesma linha; valor da entrada, stop win e stop loss cada um em linha com dropdown $/% à direita; filtrar/ignorar ativos em linha inteira.
3.00.069 - Próxima e última execução no timezone do agendamento e formato amigável conforme locale
3.00.068 - Campos filtrar ativos e ignorar ativos em linha separada cada um, com textarea para listas de ativos.
3.00.066 - Na configuração do robô, dropdown de unidade mostra apenas $ ou %; em mobile valor/stop win/stop loss em linhas separadas com layout vertical.
3.00.064 - Script de deploy: executa migrations automaticamente ao reconstruir container web (sem perguntar)
3.00.063 - Parâmetro max_segundo_entrada (config.txt e interface web). Análise e confluências sempre executam. Se passou do limite na vela atual: maioria das estratégias aguarda próxima vela e entra no segundo 0; estratégias em ENTRADA_MESMA_VELA_STRATEGIES abortam. Padrão 3s.
3.00.062 - Memoriza página do painel ao impersonar e redireciona de volta ao sair
3.00.060 - Botão impersonar na página de robôs passa a usar ícone de olho em vez de texto.
3.00.058 - Botão ao lado do email para impersonar e abrir a página de Status do robô.
3.00.056 - Melhora UX do painel admin - Voltar ao app visível em mobile; banner Sair da impersonação em todas as páginas
3.00.054 - Corrige exibição da data/hora de início da sessão na tela de STATUS do robô para fuso horário local e formato europeu
3.00.053 - correção: Adiciona ausente CHOP/Pearson/stoch globals in configuração load
3.00.052 - docs: Atualiza Deploy-instructions with corrige malange-Bot Build
3.00.051 - correção: TTZ filtro sem diferenciar maiúsculas/minúsculas comparação for Malange Cloud
3.00.050 - Corrige ConfigManagerDB.get_int() e get_float() para aceitar parâmetro valor mínimo
3.00.049 - Adiciona indicadores CHOP, Pearson e Stochastic como confluências
3.00.048 - Flexibiliza validações de parâmetros de indicadores técnicos para aceitar valores >= 0
3.00.047 - Adiciona exibição de próximo sinal e horário de entrada na Interface moderna
3.00.046 - Corrige Logs de conexão EXNOVA para aparecerem na Interface moderna
3.00.045 - Melhora visibilidade do botão de EXCLUIR robô na lista
3.00.044 - Corrige fuso horário do Trader Timer Zone para funcionar corretamente em Containers
3.00.043 - Melhora Script de Deploy: sai graciosamente quando não há atualizações
3.00.042 - Adiciona Script inteligente de Deploy para produção
3.00.041 - Corrige problema de Timing: verifica janela de entrada antes de análises pesadas
3.00.040 - Melhora Script de migração para lidar melhor com usuário da aplicação
3.00.039 - Adiciona Script seguro para migração de autenticação MySQL
3.00.038 - remove mysql_native_password obsoleto do MySQL 8.2
3.00.037 - remove query_cache_type e query_cache_size do my.cnf (removidos no MySQL 8.0)
3.00.036 - remove innodb_file_format obsoleto do my.cnf
3.00.035 - Corrige configurações incompatíveis no my.cnf para MySQL 8.2
3.00.034 - Corrige travamentos em migrações do MySQL
3.00.033 - Implementa exclusão lógica (soft delete) de robôs
3.00.032 - Corrige formatação do payout_medio na seção MASANIELLO
3.00.031 - Corrige seção LOGIN no config.txt para incluir apenas corretora
3.00.030 - Melhora painel de robôs com indicadores visuais e estatísticas
3.00.029 - Garante que seção LOGIN seja sempre incluída no config.txt exportado
3.00.028 - Corrige exportação de config.txt e adiciona importação de configurações
3.00.027 - Fixing incorrect key/value mapping on robot_config
3.00.026 - correção: config.txt sections
3.00.025 - correção: config.txt formato
3.00.024 - correção: Adiciona compartilhamento configuração rota
3.00.023 - correção: reconstruir robôs página
3.00.022 - Adding restore Script for mess in robôs página
3.00.021 - correção: Adiciona ausente traduções
3.00.020 - feat: compartilhamento Modal and importação
3.00.019 - correção: adiciona /API prefix to API rotas in Index.vue for consistency
3.00.018 - feat(admin): remove PnL Total and reorganize painel blocks
3.00.017 - correção: Adiciona ausente RobotShareController importação and Adiciona ícones to buttons
3.00.016 - feat: Adiciona robô compartilhamento with seguro links (HMAC, expiração, sanitização)
3.00.015 - correção: confluência mensagem uses interface_moderna in modern mode
3.00.014 - correção: fuso horário conversion - save next_run_at in UTC
3.00.013 - Corrige comparação de timezone no scheduler command - usa UTC para comparar next_run_at corretamente
3.00.012 - correção: Adiciona timezones list to ScheduleForm
3.00.011 - correção: Adiciona DOCKER_HOST and socket volume to fila service
3.00.010 - Adiciona fuso horário seletor to agendamento form for multi-fuso horário suporte
3.00.009 - correção: rota asset unavailable Log to Interface moderna
3.00.008 - correção: rota all signal-based estratégia Logs to Interface moderna
3.00.007 - correção: Signal Log routing to Interface moderna and prevent test seeder in produção
3.00.006 - Corrige montagem de arquivos de sinais no container do bot
3.00.005 - Sincroniza lista de corretoras do Cloud com as APIs do bot Python
3.00.004 - Garante limpeza de arquivos temporários mesmo em caso de erro ou interrupção
3.00.003 - Adiciona opção --skip-pdf ao script de build Linux para pular conversão de manuais
3.00.002 - Primeira release oficial do Malange Cloud - plataforma de gerenciamento de robôs de trading
2.08.024 - Merge branch 'malange_cloud' into main - Malange Cloud v1.0
2.08.023 - Adiciona regra de instruções de deploy para o Cursor seguir ao atualizar produção
2.08.022 - Exibe nome da corretora em maiúsculas na tabela de robôs em execução
2.08.021 - Inclui campo broker no retorno do endpoint de sessões em execução para exibir na tabela do admin
2.08.020 - Adiciona coluna de corretora na tabela de robôs em execução na página Admin/Robôs
2.08.019 - feat(admin): adiciona estatísticas globais e gráficos à painel
2.08.017 - correção(admin): corrige seção da estratégia no robot_config
2.08.016 - chore: atualiza package-travamento.json para vue-internacionalização v11
2.08.015 - feat(admin): upgrade vue-internacionalização para v11
2.08.011 - Cria tabela strategies com nomes das estrategias e seeder, admin agora mostra nome ao inves de numero.
2.08.009 - Admin: adiciona coluna de estrategia na lista de robos em execucao, entre tipo de conta e tempo.
2.08.007 - Admin: dados de robos em execucao atualizam automaticamente a cada 30s, colunas Tempo/Taxa/PnL alinhadas a direita.
2.08.005 - Painel admin agora exibe detalhes dos robos em execucao: tempo decorrido, WIN/LOSS, taxa de acerto, tipo de conta e PnL.
2.08.003 - Exibe "Malange Cloud" ao inves de "Malange" no rodape das notificacoes Telegram quando rodando em modo cloud (detectado via ROBOT_ID).
2.08.001 - Corrige o envio de mensagens do Telegram usando POST e validacoes consistentes, evitando bloqueio silencioso.
2.07.007 - Adiciona logs extensivos para diagnosticar problema de notificações do Telegram não sendo enviadas
2.07.006 - correção: Adiciona debug Logs to TelegramManager initialization
2.07.005 - Melhorar lógica de fallback para configurações do Telegram. Agora busca em AJUSTES mesmo quando LOGIN tem valor inválido (N, vazio, 0). Adicionados logs de debug detalhados para identificar problemas de configuração do Telegram.
2.07.004 - Recriar TelegramManager após reload de configuração para garantir que novas configurações do Telegram sejam carregadas. Isso resolve o problema de notificações não serem enviadas quando as configurações são alteradas durante a execução do robô.
2.07.003 - Correção para aceitar IDs negativos do Telegram (grupos/canais com prefixo -100). Alterada verificação de telegram_chat_id > 0 para telegram_chat_id != 0. Adicionados logs de debug para identificar problemas com notificações de operações individuais.
2.07.002 - Implementação de encerramento limpo do robô via arquivo STOP_BOT.signal. Quando o usuário clica em PARAR, o sistema cria o arquivo STOP_BOT.signal no container, permitindo que o robô detecte o sinal, finalize operações em andamento, envie notificações finais do Telegram e encerre corretamente. Aguarda até 60 segundos para encerramento limpo antes de forçar parada do container.
2.07.001 - Implementação do sistema de gerenciamento de arquivos de sinais para a estratégia 28 (Sinais TXT). Permite upload/edição de arquivos TXT que são montados como volumes nos containers do robô. Inclui interface web completa, traduções em 3 idiomas, e integração automática com o orquestrador Docker.
2.06.188 - Adicionar facade DB e melhorar migration para evitar locks, desabilitando foreign key checks temporariamente
2.06.187 - Otimizar migration robot_schedules criando foreign keys separadamente para evitar locks
2.06.186 - Alterar exibição do PnL % para 1 casa decimal para coincidir com formato do robô Python
2.06.185 - Adicionar name() aos eventos agendados para compatibilidade com withoutOverlapping no Laravel 11
2.06.184 - Corrigir configuração do scheduler para Laravel 11 usando withSchedule() em bootstrap/app.php
2.06.183 - Adicionar sistema de agendamento de robôs com suporte a recorrência (diária/semanal) e limite de tempo de execução
2.06.182 - Adicionar texto explicativo sobre como funciona o filtro TTZ - quando nenhuma cor está selecionada, o filtro fica desativado (salva 'N')
2.06.181 - Adicionar opções de configuração pay_minimo (payout mínimo) e filtrar_ttz (filtro Trader Timer Zone com seleção de cores) à versão CLOUD
2.06.180 - Usar query direta para operações da sessão para garantir associação correta
2.06.179 - Melhorar lógica de salvamento de saldos e adicionar logs de debug
2.06.178 - Adicionar migration para campos initial_balance e current_balance na tabela sessions
2.06.177 - Adicionar método atualizar_saldos ao SessionManagerDB para salvar saldos da sessão
2.06.176 - Adicionar tratamento de erro nas operações de salvamento de saldos para evitar que o robô trave
2.06.175 - Garantir que saldos sejam salvos no banco de dados da sessão
2.06.174 - Salvar saldos no banco em todos os caminhos de atualização (get_balance, _exibir_placar, _exibir_placar_sinais)
2.06.173 - Adicionar traduções faltantes para campos de saldo na página de Status
2.06.172 - Sempre exibir seção de saldos quando houver sessão ativa
2.06.171 - Adicionar SUPPORT_RESISTANCE à lista getConfluencesList (estava faltando)
2.06.170 - Adicionar SUPPORT_RESISTANCE ao fallback de confluências no Vue
2.06.169 - Adicionar confluência SUPPORT_RESISTANCE faltante na interface web
2.06.168 - Remover limites min/max dos campos de parâmetros avançados para permitir valores ilimitados
2.06.166 - Build Linux - atualizar pip sempre e corrigir caminhos dos manuais para conversão
2.06.165 - Corrigir malange.spec para usar getcwd() ao invés de __file__ (não disponível no contexto do spec)
2.06.163 - Corrigir inclusão do módulo credentials_manager_auto_migrate no PyInstaller
2.06.161 - Aumentar máximo de níveis de Martingale de 10 para 12
2.06.159 - Fator Martingale com 3 casas decimais; parâmetros avançados sem min/max restritivos
2.06.157 - Documentação da chave ASAAS - usar aspas simples quando começar com $ para evitar expansão no shell
2.06.155 - Cupons de desconto: painel Admin, checkout, CLI malange:create-coupon
2.06.153 - impersonação: sync password_hash for Sanctum AuthenticateSession (Corrige 401/logout)
2.06.152 - Logs: use API rota again (works with impersonação), remove Web rota
2.06.151 - Logs: use impersonate_id for robô access during impersonação
2.06.150 - correção: use full OrchestratorController namespace in Web Logs rota
2.06.149 - Logs: Adiciona try-catch, erro logging and safer unpack
2.06.148 - configuração: Melhora label readability in dark mode
2.06.146 - UI: move usuário/theme/language above menu; Corrige LanguageSelector menu suspenso z-index
2.06.144 - Logs: use Web rota to Corrige 401 during impersonação
2.06.142 - STATUS: prevent Logs painel flicker between loading and 404 erro
2.06.140 - STATUS: avoid router.reload após INICIAR/parar to prevent logout during impersonação
2.06.138 - STATUS: impersonação banner + Logs tratamento de erros
2.06.137 - Admin: use gray+indigo palette to match AppLayout (remove amber)
2.06.136 - impersonação: sticky banner in app.blade.php (always visível); fallback on LOGIN quando sessão expires
2.06.135 - STATUS: exibe PnL per recent operation (green/red/gray)
2.06.133 - Bot: use MALANGE_SESSION_ID from Orchestrator instead of creating new sessão (Corrige sessão metrics)
2.06.132 - correção: Adiciona getSessionStatusLabel to STATUS.vue (was ausente, caused blank página)
2.06.130 - correção: declare sessionStats ref in STATUS.vue so sessão metrics exibição
2.06.129 - STATUS: PnL/Vitories/Losses Today and sessão; open ops PENDENTE in yellow; sessão STATUS translated
2.06.128 - impersonação: STATUS página use API instead of router.reload to prevent redirect to LOGIN
2.06.127 - impersonação: load painel dados servidor-side to exibe impersonated usuário dados
2.06.126 - Admin: deduplicate robôs in sessões em execução list
2.06.125 - Docs: mark admin painel as completed; cleanup STATUS
2.06.123 - Atualização de versão to 2.06.122
2.06.122 - Admin: allow impersonação of usuários suspensos (bypass suspend check during impersonação)
2.06.121 - Admin painel: usuários, assinaturas, robôs; suspend, extend período de teste, impersonate; block usuários suspensos
2.06.120 - Cloud: always enable automatic mode for Web-configured robôs; remove opção from UI
2.06.119 - Atualização de versão to 2.06.118
2.06.118 - Cloud: force automatic mode and robô account_type; never prompt for input in Container
2.06.117 - Admin: Adiciona is_admin, is_suspended to usuários; EnsureUserIsAdmin Middleware
2.06.116 - configuração: Adiciona Telegram (toggle + chat ID) and Advanced params block (RSI, EMA, ADX, MACD, Keltner, etc)
2.06.115 - STATUS: automático-scroll in Container Logs with toggle botão
2.06.114 - Cloud: suppress operation open/close prints in Container Logs
2.06.113 - configuração: interativo confluências UI; MASANIELLO: payout % to odds; Orchestrator: sessão antes Container
2.06.110 - MASANIELLO: scale stake by valor_entrada to Corrige percentage configuração
2.06.109 - Docker: expose MySQL port 3306 for remoto access
2.06.108 - configuração: preserva credenciais on save; block editing quando robô rodando; credenciais hint
2.06.106 - Dark mode: Performance por robô block in painel
2.06.105 - Dark mode: complete dark styling for painel blocks and credenciais seção in configuração
2.06.104 - Corrige M15: janela de entrada apenas 0-3s, remove 50-59 that triggered análise mid-candle
2.06.103 - Dark mode: discrete toggle, preference saved in cookie
2.06.102 - configuração: valor_entrada, stop_win, stop_loss suporte amount or percent
2.06.101 - configuração.vue: Corrige expanded sections (use toggleSection/isExpanded) and translated titles
2.06.100 - PHP-FPM: clear_env=no so APP_KEY reaches workers for credential decryption
2.06.099 - Orchestrator: MALANGE_APP_KEY via env, fallback APP_KEY; docker-compose MALANGE_APP_KEY; Log quando key empty
2.06.098 - configuração UX: estratégia seleção, confluências multi-seleção, expanded blocks, exclusive management; STATUS apiFetch
2.06.097 - Credential decrypt: use configuração(app.key); warn if MALANGE_APP_KEY ausente
2.06.096 - Malange local: Adiciona scripts/ to path for credentials_manager_auto_migrate
2.06.095 - Bot cloud: Corrige Laravel decrypt MAC (iv+value as base64 strings)
2.06.094 - Bot cloud: ConfigManagerDB config_file; decrypt e-mail/senha in get()
2.06.093 - Adiciona Documentação ACESSIBILIDADE_E_FORMREQUEST.md
2.06.092 - Normalizing line endings
2.06.091 - Bot cloud: read ROBOT_ID from env; corretora fallback from robôs; empty Dockerfile CMD
2.06.090 - Corrige Docker bot: copy credentials_manager_auto_migrate to app root
2.06.089 - Docker: Adiciona www-dados to Docker socket group for API access
2.06.088 - Docker: entrypoint fixes storage/Logs permissions for www-dados
2.06.087 - robô iniciar: Adiciona explicit logging at controller entry + DEBUG_LOG_VAZIO Documentação
2.06.086 - robô INICIAR/parar: Adiciona try-catch to exibe actual erro instead of generic servidor erro
2.06.085 - robô INICIAR/parar via Web rotas to avoid API/sanctum conexão erro
2.06.084 - robô configuração: tipo de conta como radio buttons (Corrige seleção sem opções) v2.06.083
2.06.082 - ASAAS: aceita environment=live; Documentação ASAAS_CONFIGURACAO.md com webhook e token
2.06.081 - período de teste: comando malange:assign-período de teste para correção manual + createBasicoPlanIfMissing
2.06.080 - Google OAuth: assign período de teste to existing usuários without active assinatura
2.06.079 - Corrige Google OAuth: use absolute redirect URI from APP_URL
2.06.078 - Corrige Mixed Content: TrustProxies for HTTPS behind Caddy
2.06.077 - Corrige 500: SESSION_DRIVER=file - sessions tabela is for robôs not HTTP
2.06.076 - Corrige cache: configuração padrão file not banco de dados
2.06.075 - Corrige 500: CACHE_STORE=file to avoid ausente cache tabela
2.06.074 - Adiciona TROUBLESHOOT_SSL.md for ERR_SSL_PROTOCOL_ERROR
2.06.073 - Adiciona Caddy: ports 80/443, automatic Let's Encrypt SSL; Web no longer exposes ports
2.06.072 - fila: Adiciona 15s startup delay to avoid race with Web/cache
2.06.071 - Corrige Docker: copy API/ antes npm Build for Vite (vite.configuração, resources)
2.06.070 - Corrige Docker Build: move Dockerfile.prod to malange_cloud root
2.06.069 - MySQL: separate Container malange_mysql, utf8mb4, healthcheck, backup Script
2.06.068 - Adiciona automatic daily Bot imagem Atualiza from GitHub (update_bot_image.sh + cron)
2.06.067 - Adiciona Caddy reverse proxy with automatic Let's Encrypt SSL renewal
2.06.066 - Docker prod: docker-compose.prod.yml, INSTALACAO_VPS.md, .env.example, .dockerignore, env_file
2.06.065 - Upgrade stack: PHP 8.4, Laravel deps, MySQL 8.2, Node 22, remove platform constraint
2.06.064 - remove 'API' from página titles (APP_NAME=Malange Cloud in .env.example and configuração padrão)
2.06.063 - exibe Google OAuth profile photo in sidebar (compartilhamento avatar_url, exibição img in AppLayout)
2.06.062 - Adiciona SkeletonCard.vue to repo (was untracked, breaking produção Build)
2.06.061 - Corrige painel: Adiciona Sanctum statefulApi for sessão auth on API rotas; Adiciona Accept: application/json to fetches
2.06.060 - Adiciona remember_token coluna to usuários tabela (required by Laravel Auth::LOGIN)
2.06.059 - Google OAuth: move rotas to Web.php for sessão; use Auth::LOGIN for Web flow; período de teste 10d for new usuários; erro redirect to LOGIN with flash
2.06.058 - correção: Google OAuth redirect - retorna JSON apenas quando expectsJson, not for browser nav
2.06.057 - internacionalização: Adiciona ausente traduções for Register, Sessions, assinatura, cria
2.06.056 - correção: vue-internacionalização Invalid linked formato - escape @ in e-mail placeholder
2.06.055 - correção: duplicate rota name robôs.index - use API.robôs for API resource
2.06.054 - correção: Composer platform PHP 8.2.29 for produção compatibility
2.06.052 - Corrige SetLocaleFromCookie importação and ExampleTest for CI
2.06.051 - Adiciona GitHub Actions CI for Malange Cloud
2.06.050 - Adiciona critical alerts by e-mail (ASAAS, orchestrator)
2.06.049 - Adiciona fila worker service to Docker Compose
2.06.048 - Adiciona accessibility: skip Link, aria-labels, role main
2.06.047 - Adiciona loading states to all action buttons (TwoFactor, assinatura cancel)
2.06.046 - Adiciona API documentation: L5-Swagger/OpenAPI, Swagger UI at /API/documentation
2.06.045 - Adiciona structured logging: JSON channel, LogContext Middleware
2.06.044 - Adiciona SecurityHeaders Middleware and XSS protection docs
2.06.043 - Atualiza LACUNAS_PROJETO.md: remove implemented items, organize pending tasks
2.06.042 - Adiciona FormRequest for TwoFactor (enable/disable TOTP); internacionalização for send code botão; validação erro exibição
2.06.041 - Adiciona FormRequest classes for Auth, robô, assinatura
2.06.040 - Adiciona e-mail fila (banco de dados) and UX improvements
2.06.039 - Corrige timeframe Bug (M5 entries), Adiciona ASAAS integration, WebSocket docs
2.06.037 - Adiciona real-time atualizações: 2s polling, composable and WebSocket migração guide
2.06.036 - Adiciona senha reset flow: forgot senha and reset via e-mail Link
2.06.035 - Adiciona 2FA configurações página with TOTP and e-mail OTP configuration
2.06.034 - Adiciona assinatura plans página, checkout, and upgrade flow
2.06.033 - Adiciona registration página with 10-day período de teste for Basic plan
2.06.032 - Adiciona responsive layout, mobile navigation, and improved UX across all pages
2.06.031 - Adiciona complete robô management: configuração página, INICIAR/parar, real-time STATUS, assinatura limits
2.06.030 - Adiciona dashboards: API Endpoints + Vue components for stats, gráficos, sessão reports
2.06.029 - Atualiza release notes descriptions
2.06.028 - Implementa Google OAuth: redirect, callback, usuário creation/LOGIN
2.06.027 - Implementa 2FA: TOTP (authenticator apps) and e-mail OTP with TwoFactorService
2.06.026 - Implementa real Docker orchestrator: iniciar, parar, STATUS, Logs via Docker API
2.06.025 - Adiciona Docker suporte: Dockerfile, docker-compose.yml, .dockerignore, API Dockerfile
2.06.024 - Integrate Cloud operations: INSERT on open, Atualiza on close, prevent duplicates
2.06.023 - Atualiza release notes for v2.06.021 and v2.06.022
2.06.022 - Adiciona flexible DB config: env var, .env file, or config.txt [CLOUD] seção
2.06.021 - Corrige release notes for v2.06.020 Cloud mode
2.06.020 - Adiciona Cloud mode: ConfigManagerDB, SessionManagerDB, OperationsManagerDB, --robô-id arg
2.06.019 - Atualiza malange_cloud README: API and frontend in API/
2.06.018 - Adiciona cria robô form, Sessions list per robô; Link from robôs index
2.06.017 - Adiciona Inertia+Vue frontend: LOGIN, painel, robôs list; Web auth
2.06.016 - Adiciona orchestrator stubs: POST robôs/:id/iniciar, robôs/:id/parar
2.06.015 - Adiciona API resources: robôs CRUD, sessions, operations index
2.06.014 - Adiciona API auth: Sanctum, register/LOGIN/logout/me, 2FA and Google OAuth stubs
2.06.013 - Adiciona Eloquent models for Malange Cloud (usuário, robô, sessão, Operation, etc.)
2.06.012 - Adiciona Laravel API scaffold in malange_cloud/API (MySQL, migrações, seed)
2.06.011 - chore: normalize line endings (CRLF to LF)
2.06.010 - index on main: a7a00e8 Strip Co-authored-by from commit mensagens and release_notes
2.06.008 - correção
2.06.007 - Avoid
2.06.006 - Avoid
2.06.005 - Guard
2.06.004 - correção
2.06.002 - Corrige MASANIELLO win_count increment order in Telegram notifications
2.06.001 - Atualiza release notes and version
2.05.016 - Corrige DAYSHIN estratégia signal detection and Melhora Telegram notifications
2.05.015 - correção: Dayshin estratégia - detecta crossover on penultimate closed candle
2.05.014 - correção: Dayshin estratégia - prevent late entry detection
2.05.013 - correção: Dayshin estratégia - corrige candle indices após filtering
2.05.012 - correção: Dayshin estratégia - use apenas closed candles for signal detection
2.05.011 - correção: Adiciona safety checks for configuração sections access
2.05.010 - feat: Adiciona Dayshin estratégia implementation
2.05.009 - Adding pending arquivos
2.05.008 - correção: Ensure estratégia 44 is properly listed in menu and estrategias.txt - Regenerated estrategias.txt to ensure synchronization with strategy_manager - Improved menu exibição in malange.py to exibe public estratégias sorted numerically - estratégia 44 (Indicador de TendÃªncia) is now properly visível in interativo mode
2.05.006 - chore: align release notes with patch version
2.05.005 - chore: corrige version to patch level
2.05.003 - correção: Evitar entrada tardia na estrategia 44
2.05.002 - correção: Evitar entrada antecipada na estrategia 44
2.05.001 - LiberaÃ§Ã£o da estratÃ©gia Indicador de TendÃªncia
2.04.282 - correção: Corrigir Timing de entrada do Indicador de Tendencia - Ajustada logica para gerar sinal quando padrao e detectado nas ultimas 5 velas fechadas - Sinal agora e gerado para entrar na PROXIMA vela - Corrige problema onde entrada estava sendo feita uma vela atrasada
2.04.281 - feat: Adiciona Indicador de TendÃªncia estratégia (estratégia #44)
2.04.280 - Melhora Interface layout for narrow terminals: change WIN Rate to Score label and truncate estratégia/confluências text
2.04.279 - Simplify PnL exibição in Interface moderna: remove goal progress percentage
2.04.278 - Corrige Interface moderna layout for 80x25 terminals: optimize second line formatting
2.04.277 - Corrige Telegram goal percentage calculation: use original stop_win formato
2.04.276 - Corrige Telegram sessão end notifications: unify mensagens and corrige dados exibição
2.04.275 - Corrige PnL calculation in Telegram notifications - Atualiza saldo_inicial to use real account saldo quando sessão starts - Melhora PnL percentage calculation in telegram_manager.py - Ensure saldo_inicial is properly set during conexão and saldo atualizações
2.04.274 - Corrige timeframe entry Timing and Melhora WebSocket reconnection detection
2.04.272 - correção: exibição 'no suitable assets found' mensagem in Interface moderna Logs and Adiciona delay to prevent Bot from stopping
2.04.271 - Corrige accented characters appearing larger than normal text in PDF
2.04.270 - Melhora professional PDF converter: better emoji and list formatting
2.04.269 - Adiciona suporte & Resistance estratégia parâmetros to configuração.sample.txt
2.04.268 - Atualiza estrategias.txt with new suporte & Resistance estratégia (43)
2.04.267 - Adiciona suporte & Resistance estratégia (43) and confluência
2.04.266 - correção
2.04.265 - Respect interativo corretora selection
2.04.264 - Send Telegram sessão summary on manual parar
2.04.263 - Corrige Telegram sessão notification setup
2.04.262 - Melhora Telegram erro logging
2.04.261 - Corrige binary opção expiração units
2.04.260 - Adiciona PnL parameter to all operation registrations
2.04.259 - Corrige PnL color exibição in operation details report
2.04.258 - Corrige payout calculation for Martingale somente_recuperacao mode
2.04.257 - Corrige SyntaxError: remove duplicate global API declaration
2.04.256 - Adiciona saldo protection for Martingale somente_recuperacao mode
2.04.255 - Corrige MASANIELLO scoreboard logic to apenas count final cycle result
2.04.254 - Corrige MASANIELLO LOSS counting showing 0 instead of actual losses
2.04.253 - Corrige operations scoreboard showing 0 LOSS with Martingale management
2.04.252 - Corrige multiple Martingale management issues
2.04.251 - Corrige Martingale mensagens appearing outside Logs area in Interface moderna
2.04.250 - Corrige race condition in payout verificação
2.04.249 - Corrige logging to work with Interface moderna
2.04.248 - remove 10-asset limit in dynamic payout filtering
2.04.247 - Implementa dynamic payout filtering at asset selection time
2.04.246 - Corrige duplicate payout filtering issue
2.04.245 - Corrige pay_minimo filtering Bug in asset selection
2.04.244 - correção: prevent config_manager from modifying config.txt during reload
2.04.243 - correção: preserva credenciais in instance to prevent empty credenciais during reconnection
2.04.242 - correção: redirect all conectar_corretora mensagens to Interface moderna Logs
2.04.241 - correção: remove late 'global conta' inside reconnection fallback to resolve SyntaxError at line 6011; function already declares 'conta' global at iniciar
2.04.240 - correção: declare 'conta' as global at function iniciar and remove late global to resolve SyntaxError ('used prior to global declaration')
2.04.239 - correção: prevent freeze on WebSocket reconnection
2.04.238 - correção: Redirect operation mensagens to Interface moderna Logs area
2.04.237 - Corrige MASANIELLO DRAW result incorrectly treated as LOSS and advancing step
2.04.236 - CRITICAL correção: MASANIELLO parar LOSS was being ignored causing catastrophic losses
2.04.235 - Corrige hardcoded candle count limit - respect qnt_velas configuração parameter
2.04.234 - Corrige critical Timeout Bug for M5 timeframe operations
2.04.233 - Corrige duplicate operations in MASANIELLO detalhado history report
2.04.232 - v2.04.231 - correção: Correção de parâmetros na tradução masaniello_cycle_failed
2.04.230 - CLEANUP: remove mensagens de debug do leaderboard_patch.py
2.04.229 - v2.04.228 - Corrige CRÍTICO: Correção do watchdog detectando falsos positivos de travamento
2.04.227 - v2.04.226 - Corrige FINAL: Espaço ANTES do saldo, não depois
2.04.226 - v2.04.225 - correção: Alinhamento final + Desabilita ranking torneio
2.04.225 - v2.04.224 - correção: Adiciona Timeout para evitar travamento em get_leader_board
2.04.224 - v2.04.223 - correção: Corrige código do país para get_leader_board
2.04.223 - v2.04.222 - DEBUG: Adiciona Logs para investigar posição do torneio + Corrige alinhamento
2.04.222 - v2.04.221 - correção: Corrige alinhamento do saldo e busca de posição do torneio
2.04.221 - v2.04.220 - correção: Alinhamento correto da Interface com posição do torneio
2.04.220 - v2.04.219 - FEATURE: Exibe posição do ranking do torneio
2.04.218 - v2.04.217 - Corrige CRÍTICO: Sufixo -op para ativos não-OTC (14 corretoras)
2.04.216 - v2.04.215 - REVERT v2.04.213: Mantém utcfromtimestamp() - Polarium ESPERA UTC
2.04.214 - v2.04.213 - Corrige CRÍTICO: Corrige fuso horário UTC-3 em polariumbrokerapi
2.04.212 - v2.04.211 - correção: Corrige tradução + adiciona logging DEBUG detalhado
2.04.210 - v2.04.209 - correção: Converte Padrão 1x3 e R7 (16 prints) - ✅ LINT OK
2.04.208 - v2.04.207 - correção: Converte Padrão23, MelhorDeQuatro e Sexta Vela (4 prints) - ✅ LINT OK
2.04.206 - v2.04.205 - correção: Converte MHI completo para logging (10 prints)
2.04.204 - v2.04.203 - correção: Converte D21, MilhãoMaioria e MilhãoMinoria para logging (10 prints)
2.04.202 - v2.04.201 - correção: Converte Hx5 restante para logging (5 prints)
2.04.200 - v2.04.199 - correção: Converte GARRA restante para logging (3 prints)
2.04.198 - v2.04.197 - correção: Converte confluências.py para logging (erros e debug)
2.04.192 - v2.04.191 - correção: Converte General Signal para logging.debug()
2.04.190 - v2.04.189 - correção: Converte Orion Signal para logging.debug()
2.04.188 - v2.04.187 - correção: Confluências do recarregar_config agora aparecem na área de Logs
2.04.186 - v2.04.185 - Corrige CRÍTICO: remove reversão incorreta de loss_count no SOROS
2.04.184 - v2.04.184 - correção: Converte prints de MelhorDeQuatro para logging.debug()
2.04.183 - v2.04.183 - correção: Converte prints de Padrão23 para logging.debug()
2.04.182 - v2.04.182 - correção: Converte prints de MilhãoMinoria para logging.debug()
2.04.181 - v2.04.181 - correção: Converte prints de MilhãoMaioria para logging.debug()
2.04.180 - v2.04.180 - correção: Converte prints de D21 para logging.debug()
2.04.179 - v2.04.179 - correção: Converte prints de Hx5 para logging.debug()
2.04.178 - v2.04.177 - correção: Converte prints de debug das estratégias SEXTA VELA e GARRA para logging
2.04.176 - v2.04.175 - Corrige CRÍTICO: Corrige cálculo dos Keltner Channels
2.04.174 - v2.04.173 - correção: Converte prints de debug das estratégias para logging
2.04.172 - v2.04.171 - Corrige CRÍTICO: Corrige cálculo incorreto de PnL nas notificações
2.04.170 - v2.04.169 - Corrige CRÍTICO: Corrige Bug onde escolha interativa de conta REAL era sobrescrita pelo config.txt
2.04.168 - v2.04.167 - Corrige CRÍTICO: Corrige contabilização incorreta de LOSS no MARTINGALE
2.04.166 - v2.04.165 - Corrige CRÍTICO: Corrige contabilização incorreta de LOSS no SOROS COM PROTEÇÃO
2.04.164 - v2.04.163 - correção: Corrige mensagem de DRAW no MARTINGALE para mostrar nível correto
2.04.162 - v2.04.161 - correção: Corrige mensagem incorreta de DRAW no MARTINGALE
2.04.160 - v2.04.159 - FIXES CRÍTICOS: Corrige handlers WebSocket para todas as corretoras + corrige Bug crítico do MARTINGALE
2.04.158 - v2.04.157 - Corrige CRÍTICO: Corrige travamento do robô após queda de conexão WebSocket da IQOPTION
2.04.156 - Atualiza version to v2.04.155 - Critical fixes for Bot freezing após conexão LOSS
2.04.153 - CORREÇÕES CRÍTICAS: Corrige Bot freezing após conexão LOSS
2.04.152 - Corrige meta progress calculation - convert stop_win from percentage to absolute value corretamente
2.04.151 - Corrige meta progress calculation - compare pnl_percentage with stop_win corretamente
2.04.150 - Corrige STATUS line stuck on outdated operation - claras current_operation in main loops
2.04.149 - Corrige UI overflow, account selection, LOSS logging, saldo indicador and Adiciona PnL percentage exibição
2.04.148 - remove notificações duplicadas - mantém apenas para SOROS COM PROTEÇÃO
2.04.147 - Adiciona notificações do Telegram para TODAS as operações
2.04.146 - remove todos os debug Logs - Problema do Telegram totalmente resolvido
2.04.145 - 🎉 CORRIGE Bug CRÍTICO: Telegram mostrando gerenciamento incorreto
2.04.144 - Adiciona debug CRÍTICO antes de enviar para Telegram (SOROS + PROTEÇÃO)
2.04.143 - Adiciona debug na função _obter_info_telegram() para identificar problema
2.04.142 - Adiciona debug detalhado na lógica da função _obter_texto_gerenciamento()
2.04.141 - Adiciona debug logging para identificar problema do Telegram
2.04.140 - Corrige prompts interativos desnecessários de gerenciamento
2.04.139 - Adiciona resumo completo da sessão de correções do dia 19/10/2025
2.04.138 - Corrige conversão boolean incorreta nas variáveis SOROS para Telegram
2.04.137 - Corrige notificações do Telegram mostrando gerenciamento incorreto
2.04.136 - Corrige Bug de níveis ilimitados em SOROS COM PROTEÇÃO e MARTINGALE
2.04.135 - correção: remove duplicate operation registration in MASANIELLO
2.04.134 - correção: remove duplicate operation registration in detalhado history
2.04.133 - correção: corrige ConfigManager método calls in interativo configuration
2.04.132 - Docs: Atualiza Portuguese and English manuals
2.04.131 - correção: Adiciona Timeout protection for get_candles API calls
2.04.130 - correção: Melhora WebSocket reconnection during operation result wait
2.04.129 - correção: corrige won_step[0] counting for SOROS operations
2.04.128 - Docs: Atualiza professional PDFs with SOROS Protection and detalhar_operacoes
2.04.127 - Docs: Atualiza Spanish manual with SOROS Protection and detalhar_operacoes
2.04.126 - Docs: Complete English manual with all sections
2.04.125 - Docs: Complete English manual with SOROS Protection seção
2.04.124 - Docs: Atualiza English manual with SOROS Protection and detalhar_operacoes
2.04.123 - Docs: Atualizar manual português com SOROS Proteção e detalhar_operacoes
2.04.122 - correção: Restaurar funcionalidade detalhar_operacoes no relatório final
2.04.121 - correção: Mover declaração global API para início da função
2.04.120 - correção: Corrigir erro de sintaxe com declaração global API
2.04.119 - correção: Adicionar notificações do Telegram para SOROS com Proteção
2.04.118 - Release: Remover mensagens de DEBUG para versão de produção
2.04.117 - correção: Corrigir placar de operações zerado em atualizações parciais
2.04.116 - correção: Preservar valores existentes em atualizações parciais da Interface moderna
2.04.115 - correção: Corrigir saldo zerado na Interface moderna durante operações
2.04.114 - correção: Corrigir duplicação de PnL em SOROS com Proteção
2.04.113 - correção: Atualizar Interface moderna em tempo real durante operações SOROS com Proteção
2.04.112 - correção: Corrigir mensagem de confluências na Interface moderna
2.04.111 - correção: Corrigir confluência EMA_CROSS e Interface moderna
2.04.110 - correção: Corrigir classificação SOROS e eliminar duplicações
2.04.109 - correção: Usar abreviação G1, G2, G3 no histórico detalhado
2.04.108 - correção: Corrigir contadores de GALE e adicionar PnL ao histórico
2.04.107 - correção: Corrigir contabilização de WIN/LOSS no SOROS com proteção
2.04.106 - correção: Exibir contadores de GALE no relatório final
2.04.105 - correção: Corrigir classificação de operações SOROS e Martingale
2.04.104 - correção: Corrigir contabilização de operações no SOROS com proteção
2.04.103 - correção: Corrigir erro de parâmetros em registrar_operacao - robô agora processa resultados corretamente
2.04.102 - correção: Corrigir erro de tradução operation_failed - parâmetros direction/asset para direcao/ativo
2.04.101 - feat: Implementar SOROS com Proteção e múltiplas correções
2.04.100 - feat: Melhoria nas mensagens de confluências - identificação específica
2.04.099 - correção: Correções críticas - SOROS, Interface Moderna e Seleção de Conta Avalon
2.04.098 - feat: Adicionar limpeza de buffer do teclado antes do relatório final
2.04.097 - 🔧 Completar correção WebSocket em TODAS as corretoras
2.04.096 - 🔧 Corrigir problemas de WebSocket em múltiplas corretoras
2.04.095 - feat: Adicionar informações de corretora, conta, estratégia, confluências e gerenciamento nas mensagens do Telegram
2.04.094 - correção: Corrige problema de múltiplas entradas para um único sinal
2.04.093 - correção: remove Timeout de 600s que causava falha na IQ opção
2.04.092 - correção: Corrige contabilização MASANIELLO e geração de relatório final
2.04.091 - correção: remove declaração global duplicada que causava SyntaxError
2.04.090 - correção: Garante strategy_name atualizado em TODOS os locais (6/6)
2.04.089 - Corrige DEFINITIVO: Atualiza strategy_name dinamicamente dentro do loop
2.04.088 - correção: Adiciona estrategia_num às variáveis globais para corrigir atualização na Interface
2.04.087 - correção: Redireciona Logs do Python (WARNING/erro) para Interface moderna
2.04.086 - correção: Corrige Logs da estratégia 42 e atualização de nome na Interface moderna
2.04.085 - correção: Estratégia 41 (Stochastic+SMA) prints aparecendo fora da Interface moderna
2.04.084 - docs: Adicionar documentação sobre correção da Interface moderna após recarga
2.04.083 - correção: Interface moderna não atualizava nome da estratégia após recarga de configuração
2.04.082 - correção: Corrigir parâmetro de tradução strategy_recommends (código, não tradução)
2.04.081 - correção: CRÍTICO - Corrigir MASANIELLO usando saldo errado (hard-coded)
2.04.080 - chore: Remover documentação antiga substituída por FIX_EMA_SMA_CONFLUENCES.md
2.04.079 - docs: Atualizar manuais com explicação correta das confluências EMA/SMA
2.04.078 - correção: Corrigir lógica das confluências EMA3, SMA2 e SMA3
2.04.077 - revert: Reverter correção incorreta da confluência EMA_CROSS
2.04.076 - docs: Adicionar análise detalhada do STATUS Git e recomendações
2.04.075 - feat: Melhorias em documentação, internacionalização e correção crítica CasaTrade
2.04.074 - docs: Adicionar análise completa da nova versão da CasaTrade API
2.04.073 - feat: Implementar recarga dinâmica de idioma e corrigir erro WebSocket on_close()
2.04.072 - correção: Corrigir parâmetro somente_recuperacao do Martingale e sincronizar traduções
2.04.071 - feat: adiciona conversor profissional de manuais para PDF
2.04.070 - correção: Sincronização de entrada baseada no timeframe configurado
2.04.069 - correção: Correções críticas - timeframe, reconexão, Telegram e contadores
2.04.068 - correção: corrigir parâmetro Interface e exibição de filtros
2.04.067 - docs: atualizar manuais PT/EN/ES e relatórios\n\nfeat(internacionalização): corrigir inicialização de idioma antes dos managers\nfix(telegram): usar internacionalização nas mensagens e importar internacionalização\nchore(locales): adicionar chaves de Telegram em pt-BR, en-US, es-ES\nrefactor: limpar DEBUGs temporários
2.04.066 - post-commit sempre adiciona e emenda se houver mudanças
2.04.065 - Corrige hooks: bump e staging no prepare-commit-msg; pre-commit no-op
2.04.064 - Adiciona pre-commit para estagiar version.json com bump para inclusão confiável
2.04.062 - Validação com correção de CRLF nos hooks
2.04.061 - Validação final dos hooks
2.04.060 - Adiciona post-commit para emendar e incluir release_notes e version.json quando pendentes
2.04.059 - Validação do hook prepare-commit-msg
2.04.058 - Evita reentrada quando assunto já contém versão
2.04.057 - Move o incremento de versão para prepare-commit-msg; commit-msg vira no-op
2.04.055 - Teste do prepare-commit-msg adicionando arquivos
2.04.053 - Remove logs de debug do Masaniello e finaliza fluxo de atualização da interface
2.04.052 - Adiciona logs de debug para atualização da interface Masaniello
2.04.051 - Implementa hook commit-msg para versão automática e notas em PT
2.04.050 - Teste do gancho de commit-msg
2.03.003 - Implementada Interface modernapython
2.03.002 - Implementada Interface moderna
2.01.004 - Inclusão do version.json no repositório - arquivo agora é versionado junto com o código
2.01.003 - Correção da exibição incompleta da versão nas notificações do Telegram - agora usa sistema de versionamento direto e codificação adequada da URL
2.01.002 - Correção da exibição de versão em produção - sistema agora cria version.json automaticamente e usa release_notes.txt como fallback
2.01.001 - Reorganização do release_notes.txt em ordem decrescente de versão, preservando anotações de múltiplas linhas
2.00.005 - Implementação do sistema de release notes automatizado
2.00.003 - Correção no cálculo do percentual da meta batida - agora converte corretamente valores percentuais para absolutos
2.00.002 - Implementação do sistema de versionamento automatizado com 3 elementos (MAJOR.MINOR.PATCH)
