Cosmic Story v2 -arkkitehtuuri — syvä sukellus.

Insinööreille, tuotepäälliköille, toimittajille ja kumppanuusetsijöille. Koko putki, neljä MongoDB‑kokoelmaa, EDA‑tapahtumat, V‑mallin tiukkuus, suorituskykytavoitteet, turvallisuus ja saavutettavuus — kaikki yhdellä sivulla.

  • Soulwise-story on uusi NestJS‑moduuli olemassa olevan cosmic-story‑moduulin rinnalla. Suoraa tuontia ominaismoduulien välillä ei ole.
  • Neljä MongoDB-kokoelmaa: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. AES-256 salatut sisällöt, indeksoitu kunkin palveleman kyselyn mukaan.
  • Aikataulutettu generointi BullMQ-jonon kautta 28 s aikakatkaisulla. Tapahtumat lähetetään EventEmitter2 vasta tietokannan commitin jälkeen — ei haamukirjeitä.
  • V-Model-määrittely: 119 vaatimusta, nollia aukkoja. Backend‑katteen tavoite 85% palveluiden osalta; frontend‑katteen 90% Pinia‑storeissa.

Putki uudelleen, tekniset yksityiskohdat.

Jokaisella vaiheella on palvelu, sopimus ja tapahtuma.

  1. Laukaisin

    Käyttäjän toiminto — 'luo tämän päivän luku Sisarille' — tai aikataulutettu cron, kuten sunnuntain 9 a.m. yhteenveto, tai jokaisen 6‑tunnin sääpäivitys.

  2. Jono

    Työ sijoittuu BullMQ‑jonoon nimeltä soulwise-chapter-generation, jossa on tiukka 28‑sekunnin aikaraja. Pitkäkestoiset työt tapetaan ja käyttäjälle raportoidaan viestinä 'yritä uudelleen'.

  3. Koosta

    ChapterGenerationService kokoaa neljän tekijän kehotteen — henkilön kontekstin, astrologian, signaalin, rytmin — yhdeksi syötteeksi. Mitään raakaa käyttäjän henkilötietoa ei lisätä kehotteeseen sellaisenaan; kaikki puhdistetaan ensin.

  4. Luo

    AI‑palveluntarjoajaa kutsutaan AI_GENERATION_ADAPTER‑symbolitunnuksella — palveluntarjoaja on vaihdettavissa. Vastaus tarkistetaan pituuden, rakenteen ja turvallisuuden osalta ennen jatkamista.

  5. Jälkikäsittele

    Neljä asiaa tapahtuu: kriisiluokitin tarkistaa kriisikielen; aspektipiirileipäpoimija hakee yhden–kolme astrologialeiä; anti‑väitteiden suodatin poistaa kielletyt ilmaukset; runko salataan AES-256-avaimella, jonka hallinnoi alusta.

  6. Tallenna

    Artefakti kirjoitetaan oikeaan MongoDB-kokoelmaan — luvut, päiväkirjamerkinnät, resonanssit — käyttäjä- ja henkilö-tunnusindekseillä nopeaa hakua varten. Ensin pehmeä poisto; henkilötietojen lopullinen poisto 30 päivän kuluttua.

  7. Ilmoita

    EventEmitter2-tapahtuma — CHAPTER_COMPLETED, JOURNAL_CREATED — laukeaa tietokannan commitin jälkeen. Ilmoitusten moduuli sieppaa sen, luo saapuneet-kohdan ja voi lähettää push-ilmoituksen (enintään yksi päivässä, hiljaiset ajat otetaan huomioon).

  8. Näytä

    Käyttöliittymä hakee artefaktin autentikoidulla API-kutsulla. Hubi renderöi uudelleen uuden sisällön kanssa. Jos käyttäjä oli offline-tilassa, välimuisti näyttää eilisen näkymän ja uusi artefakti ilmestyy yhteyden palautuessa.

Seitsemän vaihetta laukaisusta pinnalle, jokainen nimetty sen todellisen toiminnon mukaan.

Neljä kokoelmaa

Indeksoitu kunkin vastaamien kyselyiden mukaan.

soulwise_persons

Albumimerkinnät. Indeksit kentissä userId, status, deletedAt. Pehmeä poisto ensin; PII:n pysyvä poisto 30 päivän kuluttua.

soulwise_chapters

Tekoälyn kirjoittamat luvut, salattu sisältö. Indeksit kentissä personId, userId, generatedAt. Aspect‑sirut tallennetaan erilliseen taulukkoon nopeaa suodatusta varten.

soulwise_journal_entries

Käyttäjän kirjoittamat pohdinnat, salattu sisältö. Indeksit kentissä userId, personId, createdAt. Teksti‑indeksoitu sisältö hakua varten. Jokaisessa merkinnässä 'yksityinen — älä syötä Luminaraan' -lippu.

soulwise_resonances

Neljän ulottuvuuden pisteet per side. Uniikki indeksi personId:lle. Lasketaan uudelleen palvelukutsulla luvun tai päiväkirjan tallennuksen jälkeen.

EDA‑tapahtumat

Tiukka sääntö: tapahtumat käynnistyvät vain tietokannan commitin jälkeen. Ristimoduuliriippuvuudet Symbol‑injektio­tokeneilla, ei koskaan forwardRef‑menetelmällä. Ei suoria palvelu‑palvelu‑tuontia ominaismoduulien välillä.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — käynnistyy, kun luku on salattu ja tallennettu. Notifications-v2 kuuntelee; luo saapuneet‑kohdan; voi lähettää push‑ilmoituksen.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — käynnistyy, kun päiväkirjamerkintä on salattu ja tallennettu. Resonance‑palvelu kuuntelee; käynnistää uudelleenlaskennan.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — käynnistyy, kun henkilön syntymätiedot muuttuvat. Synastria‑välimuisti poistetaan käytöstä.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — notifications-v2‑sopimuksen mukaisesti; noudattaa push‑budjettia ja hiljaisia tunteja.

V‑mallin spesifikaation tiukkuus

119 jäljitettävät vaatimukset, nollatyhjiä. Jokainen vaatimus linkittyy eteenpäin testitapaukseen (UTP, ITP, STP, E2E) ja taaksepäin käyttäjätarinaan. 20 käyttäjätarinaa. 15 toiminnallista vaatimus. 12 ei‑toiminnallisia kategorioita. 8 globaalit hyväksymiskynnykset.

Suorituskyky‑sopimus

Luvun luonti 30 sekuntia tai nopeammin 95% pyynnöistä, mitattuna BullMQ‑työaikajakauman perusteella. API‑p99 GET‑viive 500 ms tai nopeampi 1,000 samanaikaisella käyttäjällä, mitattu k6‑kuormitustestillä. Frontend‑TTI 3 sekuntia tai nopeampi simuloidussa 4 G:ssä, mitattu Lighthouse CI:llä.

Turvallisuus‑sopimus

AES-256 -salaus levossa, alusta‑hallinnoiduilla avaimilla päiväkirja‑ ja luku‑sisällöille. TLS 1.2+ siirrossa; HTTP→HTTPS‑uudelleenohjaus. JWT‑pääsytokenit, joiden voimassaoloaika on 1 tuntia, ja virkistystokenit, joiden voimassaoloaika on 30 päivää, kierto virkistyksessä. Pehmeä poisto 30 päivän ikkunalla ennen pysyvää PII‑poistoa.

Saavutettavuus‑sopimus

prefers-reduced-motion on globaalisti huomioitu — GSAP-animaatiot muuttuvat pelkiksi läpinäkyvyysfadeiksi. VoiceOver- ja TalkBack-etiketit jokaisessa interaktiivisessa elementissä. Manuaalisesti tarkistettu iOS:lla ja Androidilla ennen jokaista julkaisua.

Miksi erillinen soulwise-story-moduuli sen sijaan, että laajentaisiin cosmic-story?

Koska ylävirran määrittely rakentaa ominaisuuden uudelleen, ja uudelleenrakentaminen olemassa olevaan moduuliin rikkoisi joko v1‑kokemuksen tai vaatisi fork‑ja‑merge‑toimenpiteen myöhemmin. Uusi moduuli pitää v1 koskemattomana, antaa v2 todistaa toimivuutensa ja siirtyy puhtaasti, kun se on valmis.

Miksi MongoDB eikä Postgres?

Nykyinen My Zodiac AI -taustajärjestelmä käyttää MongoDB:tä; vaihtaminen tarkoittaisi infrastruktuuripäätöstä, joka ei liity tähän ominaisuuteen. Dokumenttimalli sopii myös luku- ja päiväkirjamerkintöihin hyvin — sisäkkäisiä, eripituisia, salattuja blobina.

Miksi BullMQ on valittu jonoksi?

BullMQ toimii Redisissä, joka on jo pinossa istuntojen ja nopeusrajoituksen vuoksi. Uutta infrastruktuuria ei tarvita. Sisäänrakennettu uudelleenyrittäminen, aikaraja ja havaittavuus kattavat luku‑generoinnin tarpeet ilman räätälöityä putkistoa.

Missä ylävirran määrittely on itse asiassa kirjoitettu?

Sisäinen repo. Tämän sivun numerot ja sopimukset tiivistävät ylävirran V‑mallin artefakteja. Julkiset insinööri‑blogikirjoitukset My Zodiac AI:n blogiklustereissa (tagattu 'cosmic-story-v2') syventyvät rakennuksen erityisiin osiin.

Kokeile My Zodiac AI:ta tänään

Soulwisen aallot avautuvat parhaillaan, mutta lippulaivamme astrologiasovellus on jo käsissäsi.

Astrologinen sisältö on tarkoitettu pohdintaan ja viihteeseen. Cosmic Story v2 -ominaisuudet, joita tässä kuvataan, ovat kehitteillä; saatavuus voi muuttua ilman erillistä ilmoitusta.