Seni bina Cosmic Story v2 — penyelaman mendalam.

Untuk jurutera, pengurus produk, wartawan, dan peninjau perkongsian. Saluran paip penuh, empat koleksi MongoDB, acara EDA, ketat V-Model, sasaran prestasi, keselamatan, dan aksesibiliti — semua pada satu halaman.

  • Soulwise-story ialah modul NestJS baharu bersama modul cosmic-story yang sedia ada. Sifar import langsung antara modul ciri.
  • Empat koleksi MongoDB: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. Badan yang dienkripsi AES-256, diindeks untuk pertanyaan yang dilayan oleh setiap satu.
  • Penghasilan asinkron melalui barisan BullMQ dengan masa tamat 28 s. Acara dihantar melalui EventEmitter2 hanya selepas komit pangkalan data — tiada item peti masuk hantu.
  • Spesifikasi V-Model: 119 keperluan, sifar jurang. Sasaran liputan backend 85% pernyataan pada perkhidmatan; frontend 90% pada stor Pinia.

Saluran paip itu, sekali lagi, dengan butiran kejuruteraan

Setiap langkah mempunyai perkhidmatan, kontrak dan acara.

  1. Pemicu

    Tindakan pengguna — 'jana bab hari ini untuk Adik' — atau cron terjadual, seperti ringkasan Ahad 9 pagi, atau penyegaran cuaca setiap 6 jam.

  2. Barisan

    Kerja ini masuk ke dalam barisan BullMQ bernama soulwise-chapter-generation, dengan had masa keras 28 saat. Kerja yang memakan masa lama akan ditamatkan dan dilaporkan kepada pengguna sebagai 'cuba lagi'.

  3. Tulis

    ChapterGenerationService menghimpunkan gesaan empat faktor — konteks individu, astrologi, isyarat, rentak — menjadi satu input. Tiada PII pengguna mentah dimasukkan ke dalam gesaan secara verbatim; semuanya dibersihkan terlebih dahulu.

  4. Jana

    Pembekal AI dipanggil melalui token simbol AI_GENERATION_ADAPTER — pembekal boleh ditukar ganti. Respons diperiksa dari segi panjang, bentuk, dan keselamatan sebelum diteruskan.

  5. Pasca-proses

    Empat perkara berlaku: pengklasifikasi krisis memeriksa bahasa krisis; pengekstrak cip-aspek menarik satu hingga tiga cip astrologi; penapis anti-tuntutan menyingkirkan frasa terlarang; badan dienkripsi dengan AES-256 menggunakan kunci yang diuruskan platform.

  6. Simpan

    Artifak ini ditulis ke koleksi MongoDB yang sesuai — bab, catatan jurnal, resonans — dengan indeks userId dan personId untuk carian pantas. Padam lembut dahulu; padam keras PII pada 30 hari.

  7. Beritahu

    Acara EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — dipicu selepas komit pangkalan data. Modul notifikasi menangkapnya, membuat item inbox, dan secara pilihan menghantar push (maksimum satu sehari, menghormati waktu senyap).

  8. Tampilkan

    Bahagian depan menarik artifak melalui panggilan API yang disahkan. Hub memuat semula dengan kandungan baru. Jika pengguna berada di luar talian, cache menyajikan paparan semalam dan artifak baru muncul semasa sambungan semula.

Tujuh langkah dari pencetus ke permukaan, setiap satu dinamakan mengikut fungsi sebenarnya.

Empat koleksi tersebut

Diindeks untuk pertanyaan yang dijawab oleh setiap satu.

soulwise_persons

Entri album. Indeks pada userId, status, deletedAt. Padam lembut dahulu; padam kekal PII pada 30 hari.

soulwise_chapters

Bab yang ditulis AI, badan dienkripsi. Indeks pada personId, userId, generatedAt. Cip aspek disimpan sebagai array berasingan untuk penapisan pantas.

soulwise_journal_entries

Refleksi yang ditulis pengguna, badan dienkripsi. Indeks pada userId, personId, createdAt. Badan berindeks teks untuk carian. Bendera 'peribadi — jangan umpan ke Luminara' untuk setiap entri.

soulwise_resonances

Skor empat dimensi per ikatan. Indeks unik pada personId. Dikira semula melalui panggilan perkhidmatan selepas bab atau jurnal ditulis.

Acara EDA

Peraturan ketat: acara hanya berlaku selepas komit pangkalan data. Kebergantungan antara modul melalui token suntikan Symbol, tidak pernah melalui forwardRef. Tiada import langsung perkhidmatan-ke-perkhidmatan antara modul ciri.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — diaktifkan selepas bab disulitkan dan dikekalkan. Notifications-v2 mendengar; mencipta item peti masuk; menghantar push secara pilihan.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — diaktifkan selepas entri jurnal dienkripsi dan disimpan. Perkhidmatan resonans mendengar; mencetuskan pengiraan semula.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — diaktifkan selepas data kelahiran seseorang berubah. Cache sinastris menjadi tidak sah.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — mengikut kontrak notifications-v2; menghormati belanjawan push dan waktu senyap.

Ketelitian spesifikasi V-Model

119 keperluan yang boleh dijejaki, sifar jurang. Setiap keperluan dipetakan ke hadapan kepada kes ujian (UTP, ITP, STP, E2E) dan ke belakang kepada cerita pengguna. 20 cerita pengguna. 15 keperluan berfungsi. 12 kategori bukan berfungsi. 8 pintu penerimaan global.

Kontrak prestasi

Penjanaan bab 30 saat atau lebih baik untuk 95% daripada permintaan, diukur terhadap taburan tempoh kerja BullMQ. Kelambatan GET p99 API 500 ms atau lebih baik pada 1,000 pengguna serentak, diukur melalui ujian beban k6. TTI frontend 3 saat atau lebih baik pada 4G yang disimulasikan, diukur melalui Lighthouse CI.

Kontrak keselamatan

Enkripsi AES-256 semasa rehat dengan kunci yang dikendalikan platform untuk badan jurnal dan bab. TLS 1.2+ dalam transit; pengalihan HTTP→HTTPS. Token akses JWT dengan jangka hayat 1 jam, token penyegaran dengan jangka hayat 30 hari, putaran semasa penyegaran. Penghapusan lembut dengan tetingkap 30 hari sebelum penghapusan keras PII.

--- Kontrak Aksesibiliti ---

prefers-reduced-motion dihormati secara global — animasi GSAP menjadi peralihan opaciti-sahaja. Label VoiceOver dan TalkBack pada setiap elemen interaktif. Disahkan secara manual pada iOS dan Android sebelum setiap pelancaran.

Mengapa modul soulwise-story yang berasingan dan bukan memanjangkan cosmic-story?

Kerana spesifikasi upstream membina semula ciri ini, dan membina semula di dalam modul sedia ada akan sama ada merosakkan pengalaman v1 atau memerlukan fork-then-merge kemudian. Modul baharu mengekalkan v1 tanpa terjejas, membenarkan v2 membuktikan diri, dan berpindah dengan bersih apabila sedia.

Mengapa MongoDB dan bukan Postgres?

Backend My Zodiac AI sedia ada menggunakan MongoDB; beralih kepada yang lain bermakna keputusan infrastruktur yang tidak berkaitan dengan ciri ini. Model dokumen juga sesuai untuk bab dan catatan jurnal — bersarang, panjang berubah-ubah, dienkripsi-sebagai-blob.

Mengapa BullMQ menjadi pilihan baris gilir?

BullMQ berjalan pada Redis, yang sudah ada di dalam stack untuk sesi dan had kadar. Tiada infrastruktur baharu. Ciri retry, timeout, dan pemerhatian terbina dalam meliputi keperluan penjanaan bab tanpa paip tersuai.

Di mana sebenarnya spesifikasi upstream ditulis?

Repo dalaman. Nombor dan kontrak pada halaman ini menghuraikan artefak V-Model upstream. Catatan blog kejuruteraan yang menghadap orang awam di kluster blog My Zodiac AI (bertanda 'cosmic-story-v2') membincangkan lebih lanjut tentang bahagian-bahagian tertentu pembinaan.

Cuba My Zodiac AI hari ini

Ketika Soulwise membuka gelombangnya, aplikasi astrologi utama kami sudah pun berada di tangan anda.

Kandungan astrologi adalah untuk tujuan refleksi dan hiburan. Ciri-ciri Cosmic Story v2 yang diterangkan di sini sedang dalam pembangunan; ketersediaan tertakluk kepada perubahan tanpa notis.