Αρχιτεκτονική Cosmic Story v2 — μια εις βάθος ανάλυση.

Για μηχανικούς, διαχειριστές προϊόντων, δημοσιογράφους και ερευνητές συνεργασιών. Η πλήρης αλυσίδα, 4 συλλογές MongoDB, γεγονότα EDA, αυστηρότητα V‑Model, στόχοι απόδοσης, ασφάλεια και προσβασιμότητα — όλα σε μία σελίδα.

  • Το Soulwise-story είναι ένα νέο module NestJS παράλληλα με το υπάρχον module cosmic-story. 0 απευθείας εισαγωγές ανάμεσα στα feature modules.
  • Τέσσερις συλλογές MongoDB: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. Σώματα κρυπτογραφημένα με AES-256, ευρετηριασμένα για τα ερωτήματα που εξυπηρετούν.
  • Ασύγχρονη δημιουργία μέσω ουράς BullMQ με 28 δ.μ. timeout. Τα γεγονότα εκπέμπονται μέσω EventEmitter2 μόνο μετά την επιβεβαίωση στη βάση δεδομένων — χωρίς φανταστικά στοιχεία εισερχόμενου.
  • Προδιαγραφή V-Model: 119 απαιτήσεις, μηδέν (0) κενά. Στόχος κάλυψης backend 85% σε επίπεδο εντολών στις υπηρεσίες· frontend 90% στα Pinia stores.

Η pipeline, ξανά, με τεχνικές λεπτομέρειες

Κάθε βήμα έχει μια υπηρεσία, ένα συμβόλαιο και ένα γεγονός.

  1. Ενεργοποίηση

    Μια ενέργεια χρήστη — 'δημιουργία του σημερινού κεφαλαίου για Sister' — ή ένα προγραμματισμένο cron, όπως η ανασκόπηση της Κυριακής 9 π.μ., ή η ενημέρωση του καιρού κάθε 6 ώρες.

  2. Ουρά

    Η εργασία προστίθεται σε μια ουρά BullMQ με όνομα soulwise-chapter-generation, με σκληρό χρονικό όριο 28 δευτερολέπτων. Οι εργασίες που διαρκούν πολύ τερματίζονται και εμφανίζονται στον χρήστη ως “try again”.

  3. Σύνθεση

    Το ChapterGenerationService συναρμολογεί το prompt των τεσσάρων παραγόντων — προσωπικό πλαίσιο, αστρολογία, σήμα, ρυθμός — σε μία ενιαία είσοδο. Κανένα ακατέργαστο προσωπικό δεδομένο (PII) του χρήστη δεν εισέρχεται αυτούσιο στο prompt· τα πάντα καθαρίζονται πρώτα.

  4. Δημιουργία

    Πάροχος AI καλείται μέσω του συμβόλου AI_GENERATION_ADAPTER — ο πάροχος είναι εναλλάξιμος. Η απάντηση ελέγχεται για μήκος, μορφή και ασφάλεια πριν συνεχιστεί.

  5. Μετά-επεξεργασία

    Τέσσερα πράγματα συμβαίνουν: ένας ταξινομητής κρίσεων ελέγχει για γλώσσα κρίσης· ένας εξαγωγέας chip πτυχών εξάγει ένα έως τρία chip αστρολογίας· ένα φίλτρο anti-claim αφαιρεί απαγορευμένες φράσεις· το σώμα κρυπτογραφείται με AES-256 χρησιμοποιώντας κλειδί που διαχειρίζεται η πλατφόρμα.

  6. Διατήρηση

    Το αντικείμενο εγγράφεται στην κατάλληλη συλλογή MongoDB — κεφάλαια, καταχωρίσεις ημερολογίου, συντονισμοί — με δείκτες userId και personId για γρήγορη αναζήτηση. Πρώτα ήπια διαγραφή· οριστική διαγραφή των PII στις 30 ημέρες.

  7. Ειδοποίηση

    Ένα συμβάν EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — ενεργοποιείται μετά την επιβεβαίωση στη βάση δεδομένων. Το module ειδοποιήσεων το συλλαμβάνει, δημιουργεί ένα στοιχείο εισερχομένων και προαιρετικά στέλνει μια ειδοποίηση push (με όριο μία την ημέρα, τηρώντας τις ώρες σιωπής).

  8. Επιφάνεια

    Το frontend ανακτά το artifact μέσω μιας αυθεντικοποιημένης κλήσης API. Το Hub επανασχεδιάζεται με το νέο περιεχόμενο. Αν ο χρήστης ήταν εκτός σύνδεσης, η cache εμφανίζει την προβολή της χθεσινής ημέρας και το νέο artifact εμφανίζεται κατά την επανασύνδεση.

Επτά βήματα από το έναυσμα ως την επιφάνεια — 7 στάδια, καθένα ονομασμένο με βάση αυτό που πραγματικά κάνει.

Οι 4 συλλογές

Ευρετηριασμένο για τα ερωτήματα που απαντά κάθε ένα.

soulwise_persons

Καταχωρίσεις άλμπουμ. Ευρετήρια στα userId, status, deletedAt. Πρώτα ήπια διαγραφή· οριστική διαγραφή των PII στις 30 ημέρες.

soulwise_chapters

Κεφάλαια γραμμένα από AI, κρυπτογραφημένο σώμα. Ευρετήρια στο personId, userId, generatedAt. Τα chips των πτυχών αποθηκεύονται σε ξεχωριστό πίνακα για γρήγορο φιλτράρισμα.

soulwise_journal_entries

Στοχασμοί που γράφει ο χρήστης, κρυπτογραφημένο σώμα. Δείκτες στο userId, personId, createdAt. Κείμενο‑δείκτης σώμα για αναζήτηση. Σημαία ανά καταχώρηση «private — do not feed to Luminara».

soulwise_resonances

Βαθμολογίες τεσσάρων διαστάσεων ανά δεσμό. Μοναδικό ευρετήριο στο personId. Επαναϋπολογίζεται μέσω κλήσης υπηρεσίας μετά τη συγγραφή κεφαλαίου ή ημερολογίου.

Συμβάντα EDA

Αυστηρός κανόνας: τα γεγονότα ενεργοποιούνται μόνο μετά την επιβεβαίωση της βάσης δεδομένων. Εξαρτήσεις μεταξύ μονάδων μέσω διακριτικών ένεσης Symbol, ποτέ μέσω forwardRef. Καμία άμεση εισαγωγή υπηρεσίας-σε-υπηρεσία μεταξύ των μονάδων χαρακτηριστικών.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — ενεργοποιείται μετά την κρυπτογράφηση και αποθήκευση ενός κεφαλαίου. Το Notifications-v2 ακούει· δημιουργεί στοιχείο εισερχόμενων· προαιρετικά στέλνει push.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — ενεργοποιείται μετά την κρυπτογράφηση και αποθήκευση μιας καταχώρισης ημερολογίου. Η υπηρεσία Resonance ακούει· ενεργοποιεί επανυπολογισμό.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — ενεργοποιείται μετά την αλλαγή των δεδομένων γέννησης ενός ατόμου. Η προσωρινή μνήμη της συναστρίας ακυρώνεται.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — σύμφωνα με σύμβαση notifications-v2· σέβεται τον προϋπολογισμό push και τις ώρες ησυχίας.

Αυστηρότητα προδιαγραφών V-Model

119 ιχνηλάσιμες απαιτήσεις, μηδέν κενά. Κάθε απαίτηση συνδέεται προς τα εμπρός με μια περίπτωση δοκιμής (UTP, ITP, STP, E2E) και προς τα πίσω με μια ιστορία χρήστη. 20 ιστορίες χρήστη. 15 λειτουργικές απαιτήσεις. 12 μη-λειτουργικές κατηγορίες. 8 παγκόσμια σημεία αποδοχής.

Σύμβαση απόδοσης

Δημιουργία κεφαλαίου 30 δευτερόλεπτα ή καλύτερα για 95% των αιτήσεων, μετρημένο σε σχέση με την κατανομή διάρκειας εργασιών BullMQ. API p99 GET καθυστέρηση 500 ms ή καλύτερα σε 1.000 ταυτόχρονους χρήστες, μετρημένο μέσω δοκιμής φόρτου k6. Frontend TTI 3 δευτερόλεπτα ή καλύτερα σε προσομοιωμένο 4G, μετρημένο μέσω Lighthouse CI.

Σύμβαση ασφαλείας

Κρυπτογράφηση AES-256 σε κατάσταση ηρεμίας με κλειδιά που διαχειρίζεται η πλατφόρμα για τα σώματα των ημερολογίων και κεφαλαίων. TLS 1.2+ κατά τη μετάβαση· ανακατεύθυνση HTTP→HTTPS. Διακριτικά πρόσβασης JWT με διάρκεια ζωής 1 ώρας, διακριτικά ανανέωσης με διάρκεια 30 ημερών, περιστροφή κατά την ανανέωση. Μαλακή διαγραφή με παράθυρο 30 ημερών πριν τη μόνιμη διαγραφή των προσωπικών δεδομένων.

Σύμβαση προσβασιμότητας

προτιμά μειωμένη κίνηση, παγκοσμίως σεβαστό — οι κινήσεις GSAP γίνονται μόνο σε διαφάνεια. Ετικέτες VoiceOver και TalkBack σε κάθε διαδραστικό στοιχείο. Επαληθεύεται χειροκίνητα σε iOS και Android πριν από κάθε έκδοση.

Γιατί ένα ξεχωριστό module soulwise-story αντί να επεκτείνουμε το cosmic-story;

Επειδή η ανώτερη προδιαγραφή ξαναδημιουργεί τη λειτουργία, και η επαναδημιουργία μέσα σε υπάρχουσα μονάδα θα έσπαγε την εμπειρία v1 ή θα απαιτούσε fork‑then‑merge αργότερα. Μια νέα μονάδα διατηρεί το v1 αμετάβλητο, αφήνει το v2 να αποδείξει την αξία του και μεταβαίνει καθαρά όταν είναι έτοιμο.

Γιατί MongoDB και όχι Postgres;

Το υπάρχον backend του My Zodiac AI είναι σε MongoDB· η αλλαγή θα σήμαινε μια απόφαση υποδομής που δεν σχετίζεται με αυτή τη λειτουργία. Το μοντέλο εγγράφων ταιριάζει επίσης καλά με κεφάλαια και καταχωρήσεις ημερολογίου — ένθετο, μεταβλητού μήκους, κρυπτογραφημένο ως blob.

Γιατί το BullMQ είναι η προτιμώμενη επιλογή ουράς;

Το BullMQ λειτουργεί σε Redis, το οποίο είναι ήδη στο σύστημα για συνεδρίες και περιορισμό ρυθμού. Δεν απαιτείται νέα υποδομή. Η ενσωματωμένη επανάληψη, το χρονικό όριο και η παρατηρησιμότητα καλύπτουν τις ανάγκες δημιουργίας κεφαλαίων χωρίς προσαρμοσμένο προγραμματισμό.

Πού είναι πραγματικά καταγραμμένο το upstream spec;

Εσωτερικό αποθετήριο. Οι αριθμοί και τα συμβόλαια σε αυτή τη σελίδα παραφράζουν τα αντικείμενα του ανώτερου μοντέλου V. Δημοσιεύσεις τεχνικού blog που προορίζονται για το κοινό στο σύμπλεγμα του blog του My Zodiac AI (με ετικέτα 'cosmic-story-v2') εμβαθύνουν σε συγκεκριμένα μέρη της κατασκευής.

Δοκιμάστε το My Zodiac AI σήμερα

Ενώ το Soulwise ανοίγει τα κύματά του, η ναυαρχίδα εφαρμογή αστρολογίας μας είναι ήδη στα χέρια σας.

Το περιεχόμενο αστρολογίας είναι για σκέψη και ψυχαγωγία. Οι λειτουργίες του Cosmic Story v2 που περιγράφονται εδώ βρίσκονται σε εξέλιξη και η διαθεσιμότητά τους μπορεί να αλλάξει χωρίς προειδοποίηση.