Cosmic Story v2 architektúra – részletes bemutatás.

Mérnököknek, termékmenedzsereknek, újságíróknak és partnerségfejlesztőknek. A teljes folyamat, négy MongoDB-gyűjtemény, EDA-események, V-Modell szigor, teljesítménycélok, biztonság és akadálymentesség — mindez egy oldalon.

  • A Soulwise-story egy új NestJS modul, amely a meglévő cosmic-story modul mellett áll rendelkezésre. Nulla közvetlen import a funkciómodulok között.
  • Négy MongoDB-gyűjtemény: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. AES-256 titkosított törzsek, indexelve a lekérdezésekhez, amelyeket mindegyik kiszolgál.
  • Aszinkron generálás BullMQ sorral, 28 s időtúllépéssel. Az események kizárólag az adatbázis-commit után kerülnek továbbításra az EventEmitter2 segítségével – nem jelennek meg fantom postaládaelemek.
  • V-Modell specifikáció: 119 követelmény, nulla hiányosság. Backend lefedettségi cél: 85% utasítás-lefedettség a szolgáltatásokon; frontend 90% a Pinia store-okon.

A folyamat, ismét, mérnöki részletességgel

Minden lépéshez tartozik egy szolgáltatás, egy szerződés és egy esemény.

  1. Kiváltó

    Egy felhasználói művelet — „generáld le a mai fejezetet a nővérnek” — vagy egy ütemezett cron, például a vasárnap 9 órás összefoglaló, vagy a 6 óránkénti időjárásfrissítés.

  2. Sor

    A feladat a soulwise-chapter-generation nevű BullMQ sorba kerül, amelynek szigorú 28 másodperces időkorlátja van. A hosszú ideig futó feladatokat leállítják, és a felhasználónak „próbáld újra” üzenettel jelzik.

  3. Új üzenet

    A ChapterGenerationService egyetlen bemenetté állítja össze a négytényezős promptot — személyi kontextus, asztrológia, jelzés, ritmus. A nyers felhasználói személyes adatok nem kerülnek szó szerint a promptba; előbb minden megtisztításra kerül.

  4. Generálás

    Az AI szolgáltatót az AI_GENERATION_ADAPTER szimbólum tokennel hívják – a szolgáltató cserélhető. A választ a hossz, forma és biztonság szempontjából ellenőrzik, mielőtt folytatnák.

  5. Utófeldolgozás

    Négy dolog történik: egy krízisosztályozó ellenőrzi a krízisnyelvezetet; egy aspektus‑chip kinyerő egy‑három asztrológiai chipet húz ki; egy anti‑állítás szűrő eltávolítja a tiltott megfogalmazásokat; a tartalom AES-256 titkosítást kap egy platform által kezelt kulccsal.

  6. Mentés

    Az adatobjektum a megfelelő MongoDB-gyűjteménybe kerül — fejezetek, naplóbejegyzések, rezonanciák —, userId és personId indexekkel a gyors kereséshez. Először lágy törlés; a személyes adatok végleges törlése 30 nap múlva történik.

  7. Értesítés

    Az EventEmitter2 esemény — CHAPTER_COMPLETED, JOURNAL_CREATED — az adatbázis-commit után aktiválódik. A notifications modul felkapja, létrehoz egy bejövő üzenetet, és opcionálisan küld push értesítést (naponta legfeljebb egy, a csendes órákat figyelembe véve).

  8. Felület

    A frontend hitelesített API hívással tölti le az artefaktot. A Hub újrarendereli az új tartalmat. Ha a felhasználó offline volt, a gyorsítótár a tegnapi nézetet szolgáltatja, és az új artefakt az újracsatlakozáskor jelenik meg.

Hét lépés a kiváltótól a felületig, mindegyik a valójában végzett feladata szerint kapta a nevét.

A négy gyűjtemény

Indexed az egyes lekérdezésekre adott válaszok szerint.

soulwise_persons

Albumbejegyzések. Indexek a userId, status és deletedAt mezőkön. Először lágy törlés; a PII végleges törlése 30 nap után.

soulwise_chapters

AI-írású fejezetek, titkosított törzs. Indexek a personId, userId, generatedAt alapján. Az aspektus-chipek külön tömbben vannak tárolva a gyors szűrés érdekében.

soulwise_journal_entries

Felhasználói reflexiók, titkosított tartalom. Indexek a userId, personId, createdAt alapján. Szövegindexelt tartalom a kereséshez. Bejegyzésenkénti "privát - ne etessük a Luminarát" jelölő.

soulwise_resonances

Négydimenziós pontszámok kötésenként. Egyedi index a personId alapján. Újraszámítva szolgáltatáshívással fejezet vagy napló írása után.

--- EDA események ---

Szigorú szabály: az események csak az adatbázis véglegesítése után aktiválódnak. A modulok közötti függőségek a Symbol injekciós tokenek segítségével valósulnak meg, soha nem a forwardRef segítségével. Nincsenek közvetlen szolgáltatás-szolgáltatás importok a funkciómodulok között.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — egy fejezet titkosítása és persistálása után kerül kiváltásra. Notifications-v2 figyeli; létrehoz egy postaládaelemet; opcionálisan küld push-értesítést.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — azután kerül kiváltásra, hogy egy naplóbejegyzést titkosítottak és persistáltak. A rezonancia szolgáltatás figyeli; újraszámítást vált ki.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — a személy születési adatainak megváltozása után kerül kibocsátásra. A szinasztria gyorsítótára érvénytelenné válik.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — a notifications-v2 szerződés szerint; tiszteletben tartja a push költségvetést és a csendes órákat.

V-Modell specifikáció szigorúsága

119 nyomon követhető követelmény, nulla rés. Minden követelmény előre egy-egy tesztesetre (UTP, ITP, STP, E2E) és visszafelé egy felhasználói történetre mutat. 20 felhasználói történet. 15 funkcionális követelmény. 12 nem funkcionális kategória. 8 globális elfogadási kapu.

Teljesítményszerződés

Fejezetgenerálás 30 másodperc vagy gyorsabb a kérések 95%-ánál, a BullMQ feladatidő-eloszlásához mérve. Az API p99 GET-késleltetése 500 ms vagy jobb 1,000 egyidejű felhasználó mellett, k6 terheléses teszttel mérve. A frontend TTI-je 3 másodperc vagy jobb szimulált 4G-n, Lighthouse CI-vel mérve.

Biztonsági szerződés

AES-256 titkosítás nyugalmi állapotban, platform által kezelt kulcsokkal a napló és fejezet testéhez. TLS 1.2+ az átvitel során; HTTP→HTTPS átirányítás. JWT hozzáférési tokenek 1 órás élettartammal, frissítési tokenek 30 napos élettartammal, rotáció a frissítés során. Lágy törlés 30 napos ablakkal a személyes adatok kemény törlése előtt.

--- Akadálymentességi szerződés ---

A csökkentett mozgásra vonatkozó globális beállítások tiszteletben tartásra kerülnek – a GSAP animációk átlátszottsági szintre redukálódnak. Minden interaktív elemhez VoiceOver és TalkBack címkék tartoznak. Manuális ellenőrzés történik iOS és Android rendszeren minden kiadás előtt.

Miért külön soulwise-story modul a cosmic-story kiterjesztése helyett?

Mivel a felső specifikáció újjáépíti a funkciót, és a meglévő modulon belüli újjáépítés vagy a v1 élményt megbontja, vagy később fork-then-merge módszerrel oldja meg. Egy új modul megtartja a v1 verziót érintetlenül, lehetővé teszi, hogy a v2 verzió bebizonyítsa az értékét, és tisztán migrálható, amikor készen áll.

Miért MongoDB és nem Postgres?

A meglévő My Zodiac AI backend MongoDB-n található; a váltás infrastrukturális döntést jelentene, amely nem kapcsolódik ehhez a funkcionalitáshoz. A dokumentummodell jól illeszkedik a fejezetekhez és a naplóbejegyzésekhez is — beágyazott, változó hosszúságú, blobként titkosított.

Miért a BullMQ a választott üzenetsor?

A BullMQ a Redis-en fut, ami már benne van a stackben a munkamenet és a sebességkorlátozás miatt. Nincs szükség új infrastruktúrára. A beépített újrapróbálkozás, időtúllépés és megfigyelés lefedi a fejezet-létrehozás igényeit anélkül, hogy egyéni csővezetékekre lenne szükség.

Hol van feljegyezve a felső spec valójában?

Belső repo. A számok és szerződések ezen az oldalon parafrázisba foglalják a felsőbb szintű V-Modell artifacteket. A My Zodiac AI blog clusterének (a 'cosmic-story-v2' címke alatt található) nyilvános műszaki blogbejegyzései részletesebben foglalkoznak az építés egyes részeivel.

Próbáld ki még ma a My Zodiac AI-t

Amíg a Soulwise hullámai nyílnak, zászlóshajó asztrológiai appunk már a kezedben van.

Az asztrológiai tartalom önreflexió és szórakoztatás céljából készült. A Cosmic Story v2 funkciói fejlesztés alatt állnak; az elérhetőség előzetes bejelentés nélkül változhat.