- Spegnimento
- 27 agosto 2026 alle ore 20:06 UTC
- Autore
- Kamo
- Impegno
- 4260460
Chiude il TODO Task 2 rimasto indietro. Fino a quando questo commette un inbound verificato STOP raggiunto BulkTextInboundController, è stato riconosciuto, è stato registrato, e poi è stato DROPPED — il punto finale ha accettato gli opt-out e non ha soppresso nulla. SmsKeywordService è il singolo scrittore: aggiunge la WORM ConsentRecord e aggiorna la riga AgentContactState il cancello in uscita già legge, in uno transazione (decisione del piano M2 — libro principale più proiezione derivata, non due fonti di verità; MS2 fa leggere il cancello ConsentRecord direttamente, dopo di che la proiezione diventa una cache). Ordine: normalizzare o rifiutare; interpretare; inserire la ricevuta di idempotency; quindi STOP / START / HELP. UNKNOWN ritorna immediatamente e non scrive nulla, quindi un il messaggio ordinario passa alla normale gestione. Decisioni da discutere in seguito. * Scrive AgentContactState direttamente piuttosto che chiamare AIService. E' gia' esistito. E' ancora inutilizzabile da qui. tre motivi indipendenti: VOIPService non ha client per AIService; AIService autentica quella superficie con un segreto DIFFERENTE ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Non accetta nessuna E.164, solo un'altra cosa. il numero è esattamente quello che un STOP in entrata è. * La chiave di contatto è "tel: <e164>". AGENT CONTACT STATE è unico su (ORGANIZZAZIONE ID, CONTACT KEY) e non ha colonna del telefono, quindi non c'è nessun posto altro un numero nudo può andare. CONSEQUENCE, NON CHIUSO DA MS1: questa riga non unisciti a una riga successiva "lead: <uid>" per lo stesso umano, quindi un cancello consulta la riga guidata dal piombo non vede opt-out. MS2 lo chiude facendo leggere il cancello ConsentRecord, che è in codice numerico. * Un STOP nudo imposta tutti e quattro i canali. Non dice solo "SMS", e leggendolo lascia l'inquilino e-mail a qualcuno che gli ha detto di fermarsi. STATO re-grants SMS ONLY — un START inviato a un numero di campagna è la prova su SMS e nient'altro. * Un org null registra la ricevuta e NONHING altrimenti. Nessuna riga di consenso, no proiezione: una ConsentRecord con un'organizzazione nulla è la pressione globale La posizione C1 si proibisce e... nullable = falso comunque. Le prove che un STOP è arrivato ancora batte il silenzio di oggi. *consentitoA preferisce il tempo di evento del vettore e i record che è stato utilizzato. Il webhook in entrata di Twilio non porta alcun timestamp, quindi l'entità javadoc's "App-set dall'evento, mai ora()" non è soddisfatta per esso. Flowroute fa inviare `timestamp`, così InboundSms ha guadagnato un `carrierEventAt` componente e Il parser Flowroute lo legge (Instant / OffsetDateTime / bare locale, normalizzato a UTC; qualsiasi cosa illeggibile è nullo, mai un'ipotesi). La prova della riga di consensoBlob porta "consentedAtSource": "carrier" | "receipt". Un tempo di ricevimento sgonfiabile e fabbricato non è; i due sono indistinguibili in seguito è ciò che non sarebbe sopravvissuto recensione. * maniglia() prende un record, non i sei parametri posizionali del piano. Il piano è firma non poteva portare il tempo di ricezione, il tempo di evento del vettore o il grezzo prova payload, e quattro dei suoi parametri erano archi adiacenti — trasposizione `da ` e `a` compila silenziosamente e sopprime il numero dell'inquilino. VOIPServiceRisultati di applicazione E' il momento giusto. Non e' vero. non ha bisogno di ingresso: basePackages match sub-packages e com.kamo.z.shared.comms è già elencato. VoipRepositoryScanTest drives Spring Data's JpaRepositoriesRegistrar sulla stessa lista dei pacchetti e afferma i tre repository SmsKeywordService inietta ottenere definizioni di fagioli. Un boot completo @SpringBootTest NON è disponibile in questo servizio — nessun database di prova, nessuna risorsa di prova, nessuna prova di contesto esistente — quindi questo esercita il registrar che decide effettivamente il risultato, senza una DataSource. TDD — fallimenti osservati, verbatim. Rosso prima di implementare: [ERROR] SmsKeywordServiceTest.java non riesce a trovare il simbolo [ERROR] simbolo: classe SmsKeywordService [ERROR] simbolo: classe InboundKeywordEvent Posizione: classe... [INFO] [ERROR] E' il momento giusto. non può trovare il simbolo [ERROR] simbolo: metodo carrierEventAt() Verde dopo: SmsKeywordServiceTest 17/17; suite completa 314/314. Mutation 1 — rimosso l'org dal ConsentRecord scrivere: [ERROR] I test vengono eseguiti: 17, Fallimenti: 2, Errori: 0 < previsto: 100L ma era: null [ERROR] E' il momento giusto. [una riga di consenso con una null org è soppressione globale — la postura C1 proibisce] [ERROR] E' il momento giusto. Mutation 2 — rimosso l'inserto di ricezione: [ERROR] I test vengono eseguiti: 17, Fallimenti: 3, Errori: 0 < Desiderato ma non invocato: [ERROR] E' il momento giusto. [ERROR] E' il momento giusto. [ERROR] E' il momento giusto. NOTA: il piano dice che questa mutazione dovrebbe girare il test RETRY rosso. No. ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** si cortocircuita prima dell'inserto e rimane GREEN sotto questa mutazione. The il piano ha chiamato il test sbagliato. Mutation 2b di seguito è quello che copre la riprovazione percorso, e senza eseguirlo il reclamo M1 idempotency avrebbe riposato su un mutazione che prova qualcos'altro. Mutation 2b — ha rimosso il pre-check esiste() invece: [ERROR] I test vengono eseguiti: 17, Fallimenti: 2, Errori: 0 < E' il momento giusto. Mai voluto qui: [ERROR] E' il momento giusto. [ERROR] E' il momento giusto. Mutation 3 — ha optato per SMS solo al posto di tutti i quattro canali: [ERROR] I test vengono eseguiti: 17, Fallimenti: 1, Errori: 0 < Aspettare il valore per essere vero ma era falso [ERROR] E' il momento giusto. Mutation 4 - ha perso il controllo. pacchetti, cioè il CrashLoop stesso: [ERROR] I test vengono eseguiti: 3, Fallimenti: 2, Errori: 0 < [ERROR] E' il momento giusto. [ConsentRecordRepository non ha alcuna definizione di fagiolo...] non è coperto da @EnableJpaRepositories. Questo non è un runtime null: il contesto REFUSES TO START and the pod CrashLoops.] [ERROR] E' il momento giusto. [la sonda di questo test è derivata dalla vera annotazione di VOIPServiceApplication] Tutti invertiti. Suite completa dopo la deviazione: I test funzionano: 314, Errori: 0, Errori: 0. DDL non ha patito. Questo dipende dall'aggiunta di kamo-shared-library E' una cosa che non va. esiste ancora nel database. Costruito localmente contro un vaso condiviso-lib in un PRIVATO -Dmaven.repo.local; ~/.m2's 1.6.0 vaso è stato verificato date-identico prima e Dopo aver ricevuto 5 dollari