Learnings
12
Recálculo de duração de áudio depende da troca de arquivo
learnings/audio_duration_recalc_on_file_change.md
→
Push do áudio diário: fonte única de verdade
learnings/audio_push_notification_single_source.md
→
UserJourney via task Celery: race com a leitura imediata do daily audio
learnings/audios_journey_creation_race_via_celery.md
→
Flush de progresso nunca rodou em produção
learnings/engagements_flush_de_progresso_nao_registrado.md
→
Notificação enviada para hábito deletado
learnings/habits_notification_for_deleted_habit.md
→
DD_TRACE_ENABLED em staging via settings, não via configmap
learnings/infrastructure_dd_trace_disabled_staging_via_settings.md
→
Migração do banco de staging da DigitalOcean para o Aurora
learnings/infrastructure_do_to_aurora_staging_migration.md
→
Migração do cache de staging da DigitalOcean para o ElastiCache
learnings/infrastructure_do_to_elasticache_staging_migration.md
→
Banco de staging esgotava conexões sem PgBouncer
learnings/infrastructure_pgbouncer_connection_pool.md
→
Quorum queues não suportam global QoS e o Celery precisa do x-queue-type declarado
learnings/infrastructure_rabbitmq_quorum_queues_global_qos.md
→
Celery countdown/ETA com SQS e visibility_timeout
learnings/infrastructure_sqs_countdown_visibility_timeout.md
→
FCM send_each: envio em lote e tratamento de token expirado
learnings/notifications_fcm_send_each_batch_expired_tokens.md
→
Plans
7
Implementação da API de micro hábitos
plans/20260302175328_habits_api.md
→
Sequência de implementação da jornada de áudios
plans/20260512172815_audio_journey.md
→
Campaign e Tracking Links — Implementation Plan
plans/20260807111717_campaign_and_tracking_links.md
→
Static Bearer Auth — Trial Register Endpoint
plans/20260813165514_static_bearer_trial_register.md
→
Job diário de emails da régua de trial
plans/20260825100154_trial_journey_emails_job.md
→
Trial da campanha travado com usuários cadastrados
plans/20260826094500_campaign_trial_locked_with_user_trials.md
→
Corrigir race na criação da UserJourney ao aceitar termos
plans/20260826143330_journey_creation_race.md
→
Reference
6
Jornada de áudios diários
reference/audios/daily_audio_journey.md
→
Hábitos default
reference/habits/default_habits.md
→
API de micro hábitos
reference/habits/habits_api.md
→
Contrato do DATABASE_URL
reference/infrastructure/database_url.md
→
Push de hábitos e lembretes via FCM em lote
reference/notifications/habit_push_notifications.md
→
Tópicos FCM por plataforma
reference/notifications/platform_topics.md
→
Rules
21
Troca de e-mail unifica as contas quando o destino já existe
rules/accounts/email_change_merges_existing_account.md
→
Áudio fora da jornada é conteúdo diário livre
rules/audios/audio_outside_journey_is_free_daily_content.md
→
Usuário fora da jornada recebe sempre o áudio atual fora da jornada
rules/audios/daily_audio_outside_journey.md
→
Avanço na jornada por conclusão, no dia seguinte
rules/audios/journey_advances_next_day_after_completion.md
→
Trava por progresso insuficiente na jornada de áudios
rules/audios/journey_locked_below_ninety_percent.md
→
Endpoint retorna a posição atual na jornada de áudio
rules/audios/journey_position_endpoint.md
→
Re-escuta após conclusão não retrocede o usuário na jornada
rules/audios/journey_relisten_does_not_regress.md
→
Novo usuário percorre a sequência da jornada
rules/audios/journey_sequence_for_new_user.md
→
Transição após o último áudio da jornada
rules/audios/journey_transition_after_last_audio.md
→
Trial da campanha é travado quando há usuários cadastrados
rules/campaigns/campaign_trial_locked_with_user_trials.md
→
Progresso de aula persiste direto e de forma sincrona
rules/engagements/lesson_progress_direct_synchronous_persist.md
→
Gate de notificação de hábito libera as ondas de lembrete
rules/notifications/habit_notification_gate.md
→
Model Notification é reservado a envios pontuais
rules/notifications/notification_model_point_in_time_only.md
→
Limite de áudios do trial é sempre igual à duração em dias
rules/trials/audio_limit_synced_to_duration.md
→
Desbloqueio de cursos para usuário em trial
rules/trials/trial_course_unlock.md
→
Régua de emails de trial por percentual consumido
rules/trials/trial_journey_emails.md
→
Desbloqueio de aulas para usuário em trial
rules/trials/trial_lesson_unlock.md
→
Estado do trial exposto no sign-in e no perfil
rules/trials/trial_state_in_auth_endpoints.md
→
UserTrial marca converted_at quando checkout IBFT é aprovado
rules/trials/user_trial_converted_at_on_checkout_approval.md
→
Janela do trial é imutável após a criação
rules/trials/user_trial_dates_immutable_in_admin.md
→
Elegibilidade para cadastro de trial via campanha
rules/trials/user_trial_register.md
→
Specs
64
Renomear a branch padrão de master para main
specs/20260331175408_rename_master_to_main.md
→
Stack Python no commons
specs/20260408094751_python_stack_commons.md
→
Integração com Datadog
specs/20260413000000_datadog_integration.md
→
Infraestrutura k8s para staging
specs/20260414120000_k8s_infra_staging.md
→
Migrar o deploy de staging para k8s
specs/20260417141500_migrate_staging_to_k8s.md
→
DATABASE_URL readonly por padrão
specs/20260419000000_database_url_readonly_default.md
→
Hábitos default no onboarding
specs/20260506120000_default_habits.md
→
Streak, consistência e totais diários de hábitos
specs/20260507160624_habit_streak_consistency.md
→
Endpoint de consistência por intervalo
specs/20260508155907_consistency_range_endpoint.md
→
Fix: notificação enviada para hábito deletado
specs/20260513000000_fix_notification_deleted_habit.md
→
Configurar TZ nos pods e no banco de staging
specs/20260518000000_configure_tz_staging.md
→
FK do áudio para a notificação agendada
specs/20260520111929_audio_notification_fk.md
→
Fix: deploy no servidor onion-worker
specs/20260521000000_fix_deploy_onion_tasks.md
→
Comentário na reaction de aula
specs/20260522090219_reaction_lesson_comment.md
→
Tópicos de plataforma para notificações
specs/20260522145722_notifications_platform_topics.md
→
Envio segmentado por plataforma
specs/20260522172251_send_to_platform_topic.md
→
Inscrição automática do device nos tópicos FCM padrão
specs/20260525000000_auto_subscribe_device_topics.md
→
Lembretes de hábitos não executados
specs/20260525120000_habit_reminder_notifications.md
→
has_new_lessons considera o progresso do usuário
specs/20260527000000_has_new_lessons_user_progress.md
→
Fix: esgotamento de conexões do banco de staging
specs/20260601000000_staging_db_conn_max_age.md
→
Janela de 10 minutos no envio de notificações de hábitos
specs/20260602000000_notification_10min_window.md
→
Descrição do hábito no dashboard
specs/20260603092340_habit_description_in_dashboard.md
→
Filas dedicadas para checkout e progresso
specs/20260604120000_dedicated_queues_checkout_progress.md
→
CONN_MAX_AGE para reduzir churn de conexões
specs/20260605122000_conn_max_age.md
→
Tratamento resiliente de token FCM expirado
specs/20260608113017_expired_fcm_token.md
→
Progresso com buffer: Redis + flush periódico
specs/20260612142912_progress_buffer_redis_flush.md
→
worker-progress em staging + cleanup de runtime e CELERY_QUEUES
specs/20260615085522_staging_worker_progress_checkout_queues.md
→
Envio direto de push de hábitos e lembretes via FCM em lote
specs/20260615095011_habit_push_batch_fcm.md
→
Cleanup do runtime mode e rename de CELERY_DEFAULT_QUEUE
specs/20260615161050_celery_queues_runtime_cleanup.md
→
Credenciais do Firebase no cluster de staging
specs/20260615180230_firebase_credentials_staging.md
→
Recalcular duração ao trocar o arquivo de áudio
specs/20260617095609_recalculate_audio_duration_on_update.md
→
save_device: expirar push devices duplicados no registro
specs/20260618095213_save_device_expire_duplicates.md
→
Fix: contagem inconsistente do funil de progresso de áudio
specs/20260618154500_fix_audio_progress_funnel_counts.md
→
Varredura de padrão — backend (admin + liberação por aula)
specs/20260622174633_varredura_pattern_scan_backend.md
→
Sync de troca de e-mail — ibft-api → onion-backend
specs/20260703114457_email_change_sync.md
→
Migrar os secrets do onion-backend de SOPS para ward
specs/20260706235356_migrate_onion_backend_secrets_to_ward.md
→
Trilha de cursos
specs/20260709175422_trail_courses.md
→
Persistência direta de progresso com fallback por rate limit
specs/20260710112204_progress_direct_persist_rate_limit.md
→
Migrar o CI de infra do onion-backend para ward/EKS
specs/20260710192955_migrate_infra_ci_to_eks.md
→
Migrar o cache de staging da DO para o AWS ElastiCache
specs/20260710235220_migrate_staging_cache_do_to_aws.md
→
Migrar o banco de staging da DO para o AWS Aurora
specs/20260711003900_migrate_staging_db_do_to_aws.md
→
Fix: migrate job no CI
specs/20260721194818_fix_migrate_ci.md
→
Unsubscribe de tópicos FCM ao expirar dispositivo
specs/20260723094615_unsubscribe_topics_on_device_expire.md
→
Migrar production para o EKS com convergência de dados para a ibft-vpc
specs/20260806102829_migrate_production_to_eks.md
→
Campaign e Tracking Links
specs/20260807111328_campaign_and_tracking_links.md
→
Cadastro de Usuário Trial
specs/20260811000000_user_trial_register.md
→
Objeto `trial` no login e no perfil
specs/20260817160340_trial_object_auth_endpoints.md
→
Bloqueio de aulas fora do trial
specs/20260818114553_trial_lesson_gating.md
→
Campo `unlocked` no curso
specs/20260819163343_trial_course_unlock.md
→
Link de checkout no Trial
specs/20260819175102_trial_checkout_url.md
→
Workers de staging não consomem filas — quorum queues e global QoS
specs/20260821160901_staging_quorum_queues_global_qos.md
→
Simplificar campos do admin de Trial
specs/20260824111639_simplify_trial_admin_fields.md
→
Datas do Trial sem horário no admin
specs/20260824135425_trial_dates_without_time.md
→
Modo "Todas as aulas" do trial libera todas as aulas direto
specs/20260824171047_trial_all_mode_unlocks_everything.md
→
Job diário de emails da régua de trial por percentual consumido
specs/20260825095058_trial_journey_emails_job.md
→
Trial da campanha é travado quando há usuários cadastrados
specs/20260826093829_campaign_trial_locked_with_user_trials.md
→
Reserva dos emails da régua de trial em bloco
specs/20260826112801_trial_journey_block_reservation.md
→
Corrigir race na criação da UserJourney ao aceitar termos
specs/20260826142256_journey_creation_race.md
→
Invalidar cache de hábitos ao criar, atualizar ou deletar hábito
specs/20260831000000_habit_cache_week_invalidation.md
→
Aviso de confirmação ao alterar email do usuário no admin
specs/20260902151259_admin_email_change_warning.md
→
Download do Termo de Uso com dados do usuário no admin
specs/20260903144445_user_contract_term_pdf.md
→
Exportar Comentários das Lições
specs/20260909000000_export_lesson_comments.md
→
Merge de contas na troca de e-mail quando o destino já existe
specs/20260915090842_email_change_account_merge.md
→
Comparativo acesso ativo vs engajados no analytics
specs/20260915120000_analytics_with_access_metric.md
→