- Shipped
- 27 de agosto de 2026 às 20:06 UTC
- Author
- Kamo
- Commit
- 4260460
Fecha a tarefa TODO 2 deixada para trás. Até que este commit um STOP de entrada verificado chegou BulkTextInboundController, foi reconhecido, foi registrado, e foi então DROPPED — o endpoint aceitou opt-outs e não suprimiu nada. SmsKeywordService é o único escritor: ele adiciona o consentimento do WORMRecord e atualiza o AgenteContatoEstado linha o portão de saída já lê, em um operação (plano Decisão M2 — livro contabilístico mais projecção derivada, não duas fontes de verdade; MS2 faz a porta ler o consentimentoRecord diretamente, após o que o projeção torna-se um cache). Ordem: normalizar ou recusar; interpretar; inserir o recibo de indemnidade; então Pare, comece, ajude. UNKNOWN retorna imediatamente e não escreve nada, então um a mensagem comum passa para a manipulação normal. As decisões valem a pena discutir com mais tarde. * Escreve AgenteContactState diretamente em vez de chamar AIService. Já está exposto em E ainda é inutilizável daqui para três razões independentes: VOIPService não tem cliente para AIService; AIService autentica essa superfície com um segredo diferente **************** não interna.auth.secret); e o ponto final Não aceita nenhum E.164, apenas **************** número é exatamente o que uma entrada STOP é. * Chave de contato é "tel:<e164>". AGENT CONTACT STATE é único em (ORGANIZAÇÃO ID, CONTACT KEY) e não tem coluna de telefone, então não há lugar nenhum Caso contrário, um número nu pode ir. CONSEQUÊNCIA, NÃO FECHADO POR MS1: esta linha não merge com uma linha posterior de "leader:<uid>" para o mesmo humano, por isso uma consulta no portal a linha com chave de chumbo não vê nenhum opt-out. MS2 fecha fazendo o portão ler ConsentimentoRecord, que é chave número. * Uma STOP nua define todos os quatro canais. Não diz "somente SMS", e lê-lo Assim deixa o inquilino a enviar um e-mail a alguém que lhes disse para pararem. INÍCIO re-concede SMS SOMENTE — um START enviado para um número de campanha é evidência sobre SMS E nada mais. * Uma org nula registra o recibo e nada mais. Nenhuma linha de consentimento, não projection: a consentRecord with a null organization is the global-supression postura C1 proíbe, e ********************** é nullable = false de qualquer forma. As provas de que chegou uma STOP ainda batem o silêncio de hoje. * consentidoPrefere a hora do evento da transportadora e os registros que foram usados. Twilio's inbound webhook carrega NO timestamp em tudo, então a entidade javadoc "app-set from the event, never now()" não é satisfatório para isso. Flowroute faz enviar `timestamp`, assim InboundSms ganhou um `carrierEventAt` componente e o O analisador de rota de fluxo lê- o (Instant / OffsetDateTime / local desnudo, normalizado para UTC; qualquer coisa ilegível é nula, nunca um palpite). A prova da linha de consentimentoBlob carrega "consentidoAtSource": "carregador" "recebedor". A hora de recebimento é defensável e um fabricado não é; os dois sendo indistinguíveis depois é o que não sobreviveria à revisão. * handle () toma um registro, não os seis parâmetros posicionais do plano. O plano é... a assinatura não pôde carregar o tempo de recebimento, a hora do evento do transportador ou o bruto carga útil prova, e quatro dos seus parâmetros foram adjacentes Strings - transposição 'de' e 'para' compila silenciosamente e suprime o próprio número do inquilino. Ganhos de aplicação do VOIPService **************************** **************************** não necessita de entrada: basePackages corresponde sub-pacotes e com.kamo.z.shared.comms já estão listados. VoipRepositoryScanTest drives Spring Data's JpaRepositóriosRegistrar sobre a mesma lista de pacotes e afirma que os três repositórios SmsKeywordService injects recebem definições de feijão. Uma inicialização completa do @SpringBootTest NÃO está disponível neste serviço — nenhuma base de dados de testes, sem recursos de teste, sem teste de contexto existente – então isso exerce o registro que realmente decide o resultado, sem um DataSource. TDD — falhas observadas, verbatim. Vermelho antes de implementar: [ERROR] SmsKeywordServiceTest.java não consegue encontrar o símbolo [ERROR] símbolo: classe SmsKeywordService [ERROR] símbolo: classe InboundKeywordEvent Localização: classe. Falha no edifício [ERROR] **************************** não foi possível encontrar o símbolo [ERROR] symbol: method carrierEventAt() Verde depois: SmsKeywordServiceTest 17/17; suite completa 314/314. Mutação 1 — retirou a ordem do consentimentoRecord escrever: [ERROR] Testes executados: 17, Falhas: 2, Erros: 0 < < < Falha! esperado: 100L mas foi: nulo [ERROR] **************************** [uma linha de consentimento com um org nulo é supressão global – a postura C1 proíbe] [ERROR] **************************** Mutação 2 — retirou o suplemento de recibo: [ERROR] Testes executados: 17, Falhas: 3, Erros: 0 < < < Falha! Procurados, mas não invocados: [ERROR] **************************** [ERROR] **************************** [ERROR] **************************** NOTA: o plano diz que esta mutação deve tornar o teste RETRY vermelho. Não. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Ele faz curto-circuitos antes da inserção e permanece GREEN sob esta mutação. A O plano nomeou o teste errado. Mutação 2b abaixo é o que cobre a repetição caminho, e sem executá-lo a reivindicação de imunidade M1 mutação que prova outra coisa. Mutação 2b — removido o pre- check existent(): [ERROR] Testes executados: 17, Falhas: 2, Erros: 0 < < < Falha! **************************** Nunca quis estar aqui. [ERROR] **************************** [ERROR] **************************** Mutação 3 — optou por SMS apenas em vez dos quatro canais: [ERROR] Testes executados: 17, Falhas: 1, Erros: 0 < < < Falha! Esperando que o valor fosse verdadeiro, mas era falso [ERROR] **************************** Mutação 4 — caiu do scanner. pacotes, ou seja, o próprio CrashLoop: [ERROR] Testes executados: 3, Falhas: 2, Erros: 0 < < < Falha! [ERROR] **************************** [ConsentRecordRepository não tem definição de feijão - ******************* não é coberto por @EnableJpaRepositórios. Isto não é um período de execução nulo: o O contexto RECUSA PARA COMEÇAR e o pod CrashLoops.] [ERROR] **************************** [a sonda deste teste foi desviada da anotação real da VOIPServiceApplication] Todos revertidos. Suíte completa após reversão: Testes executados: 314, Falhas: 0, Erros: 0. A DDL não aterrou. Isso depende da adição de biblioteca compartilhada com kamo Comms sms inbound receipt e ********** nenhum dos quais ainda existe na base de dados. Construído localmente contra um jar de lib em um PRIVATE -Dmaven.repo.local; ~/.m2 depois (md5 **********************