معماری Cosmic Story v2 — بررسی عمیق.

برای مهندسان، مدیران محصول، روزنامه‌نگاران و جستجوگران مشارکت. تمام خط لوله، چهار مجموعه MongoDB، رویدادهای EDA، دقت مدل‑V، اهداف عملکرد، امنیت و دسترس‌پذیری — همه در یک صفحه.

  • Soulwise-story یک ماژول جدید NestJS است که در کنار ماژول موجود cosmic‑story قرار می‌گیرد. هیچ واردسازی مستقیمی بین ماژول‌های ویژگی وجود ندارد.
  • چهار مجموعه MongoDB: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. بدنه‌های رمزگذاری‌شده با AES-256، برای پرس‌و‌جوهایی که هر کدام خدمت می‌کنند، ایندکس شده‌اند.
  • تولید ناهمزمان از طریق صف BullMQ با زمان‌انتظار 28 ثانیه. رویدادها توسط EventEmitter2 فقط پس از تأیید پایگاه‌داده ارسال می‌شوند — بدون موارد صندوق ورودی وهمی.
  • مشخصات مدل V: 119 نیازمندی، صفر شکاف. هدف پوشش بک‌اند 85% در سطح دستورات روی سرویس‌ها؛ فرانت‌اند 90% روی استورهای Pinia.

خط لوله، دوباره، با جزئیات مهندسی

هر مرحله دارای یک سرویس، یک قرارداد و یک رویداد است.

  1. راه‌اندازی

    یک عمل کاربر — 'generate today's chapter for Sister' — یا یک کرون زمان‌بندی‌شده، مانند خلاصهٔ ساعت ۹ صبح روز یکشنبه، یا به‌روزرسانی آب‌وهوای کیهانی هر ۶ ساعت.

  2. صف

    کار در صف BullMQ به نام soulwise-chapter-generation قرار می‌گیرد و دارای زمان‌سنجی سختِ ۲۸ ثانیه‌ای است. کارهای طولانی‌مدت متوقف شده و به کاربر به‌عنوان «دوباره تلاش کنید» گزارش می‌شوند.

  3. نوشتن

    سرویس ChapterGenerationService پرامپتِ ۴عاملی — زمینهٔ فرد، نجوم، سیگنال و کادنس — را در قالب ۱ ورودی واحد گرد هم می‌آورد. هیچ داده‌ٔ شناساییِ خام کاربر عیناً وارد پرامپت نمی‌شود؛ همه‌چیز ابتدا پاک‌سازی می‌شود.

  4. تولید

    یک ارائه‌دهنده هوش مصنوعی از طریق توکن نماد AI_GENERATION_ADAPTER فراخوانی می‌شود — این ارائه‌دهنده قابل تعویض است. پاسخ قبل از ادامه‌دادن برای طول، شکل و ایمنی بررسی می‌شود.

  5. پس‌پردازش

    چهار چیز رخ می‌دهد: یک طبقه‌بند بحران زبان بحران را بررسی می‌کند؛ یک استخراج‌کننده چیپ‌های جنبه ۱ تا ۳ چیپ نجومی استخراج می‌کند؛ یک فیلتر ضد ادعا عبارات ممنوع را حذف می‌کند؛ بدنه با AES-256 و کلید مدیریت‌شده توسط پلتفرم رمزگذاری می‌شود.

  6. پایدارسازی

    این داده در مجموعهٔ مناسب در MongoDB ذخیره می‌شود — فصل‌ها، یادداشت‌های دفترچه، رزونانس‌ها — همراه با ایندکس‌های userId و personId برای جست‌وجوی سریع. ابتدا حذف نرم؛ حذف کامل اطلاعات شخصی پس از ۳۰ روز.

  7. اطلاع‌رسانی

    یک رویداد EventEmitter2 — CHAPTER_COMPLETED، JOURNAL_CREATED — پس از تأیید پایگاه‌داده فعال می‌شود. ماژول اعلان‌ها آن را دریافت می‌کند، یک مورد صندوق ورودی ایجاد می‌کند و به‌صورت اختیاری یک پوش ارسال می‌کند (حداکثر یک بار در روز، ساعات سکوت رعایت می‌شود).

  8. نمایش

    فرانت‌اند اثر را از طریق یک فراخوانی API احراز هویت‌شده دریافت می‌کند. هاب با محتوای جدید دوباره رندر می‌شود. اگر کاربر آفلاین بوده باشد، کش نمای دیروز را ارائه می‌دهد و اثر جدید هنگام اتصال مجدد ظاهر می‌شود.

هفت (۷) گام از جرقهٔ آغازین تا ظهور نهایی، که هر کدام به نام کاری که واقعاً انجام می‌دهد، نامیده شده است.

⟦CA:NUM:4⟧ مجموعه

فهرست‌شده برای پرسش‌هایی که هر یک پاسخ می‌دهد.

soulwise_persons

ورودی‌های آلبوم. ایندکس‌ها روی userId، status و deletedAt. ابتدا حذف نرم؛ حذف کامل اطلاعات شخصی (PII) در 30 روز.

soulwise_chapters

فصل‌های نوشته‌شده توسط هوش مصنوعی، بدنهٔ رمزگذاری‌شده. ایندکس‌ها بر روی personId، userId، generatedAt. چیپ‌های Aspect به‌صورت آرایه‌ای جداگانه برای فیلتر سریع ذخیره می‌شوند.

soulwise_journal_entries

بازتاب‌های نوشته‌شده توسط کاربر، بدنهٔ رمزگذاری‌شده. ایندکس‌ها بر روی userId، personId، createdAt. بدنهٔ متنی ایندکس‌شده برای جستجو. پرچم «خصوصی — به Luminara تغذیه نشود» برای هر ورودی.

soulwise_resonances

امتیازهای چهاربعدی برای هر پیوند. ایندکس یکتا بر روی personId. پس از نوشتن فصل یا ژورنال، از طریق فراخوانی سرویس دوباره محاسبه می‌شود.

رویدادهای EDA

قانون سخت‌گیرانه: رویدادها فقط پس از تأیید پایگاه‌داده اجرا می‌شوند. وابستگی‌های بین‌ماژولی از طریق توکن‌های تزریق Symbol، هرگز از طریق forwardRef نیستند. هیچ واردسازی مستقیم سرویس‑به‑سرویس بین ماژول‌های ویژگی وجود ندارد.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — پس از رمزنگاری و ذخیره‌سازی یک فصل فعال می‌شود. Notifications-v2 گوش می‌دهد؛ یک مورد در صندوق ورودی ایجاد می‌کند؛ در صورت نیاز push ارسال می‌کند.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — پس از رمزنگاری و ذخیره‌سازی یک ورودی دفترچه، فعال می‌شود. سرویس رزونانس گوش می‌دهد؛ محاسبه مجدد را تحریک می‌کند.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — پس از تغییر داده‌های تولد یک شخص فعال می‌شود. کش تطبیق سایر نامعتبر می‌شود.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — بر اساس قرارداد notifications-v2؛ بودجهٔ پوش و ساعات سکوت را رعایت می‌کند.

دقت مشخصات مدل V

119 نیازمندی قابل‌ردیابی، صفر شکاف. هر نیازمندی رو به جلو به یک مورد آزمون (UTP, ITP, STP, E2E) و رو به عقب به یک داستان کاربر نگاشت می‌شود. 20 داستان کاربر. 15 نیازمندی کارکردی. 12 دستهٔ غیرکارکردی. 8 دروازهٔ پذیرش سراسری.

قرارداد عملکرد

تولید فصل 30 ثانیه یا کمتر برای 95% درخواست‌ها، اندازه‌گیری شده نسبت به توزیع زمان اجرای کار BullMQ. تاخیر GET API p99 500 میلی‌ثانیه یا کمتر با 1,000 کاربر همزمان، اندازه‌گیری شده با تست بار k6. TTI فرانت‌اند 3 ثانیه یا کمتر در شبیه‌سازی 4G، اندازه‌گیری شده با Lighthouse CI.

قرارداد امنیت

رمزنگاری AES-256 در حالت استراحت با کلیدهای مدیریت‌شده توسط پلتفرم برای بدنه‌های ژورنال و فصل. TLS 1.2+ در حین انتقال؛ تغییر مسیر HTTP→HTTPS. توکن‌های دسترسی JWT با مدت‌زمان 1 ساعت، توکن‌های تازه‌سازی با مدت‌زمان 30 روز، چرخش در هنگام تازه‌سازی. حذف نرم با بازهٔ 30 روز قبل از حذف دائمی اطلاعات شخصی (PII).

قرارداد دسترسی‌پذیری

حالت prefers-reduced-motion به‌صورت سراسری رعایت می‌شود — انیمیشن‌های GSAP فقط به‌صورت محو شدن با تغییر شفافیت اجرا می‌شوند. برچسب‌های VoiceOver و TalkBack برای هر عنصر تعاملی اضافه شده‌اند. قبل از هر انتشار، به‌صورت دستی بر روی iOS و Android تأیید می‌شود.

چرا به جای گسترش cosmic-story، یک ماژول جداگانه soulwise‑story ایجاد کنیم؟

از آنجا که مشخصات بالادستی ویژگی را دوباره می‌سازد و بازسازی داخل یک ماژول موجود یا تجربه v1 را خراب می‌کند یا بعداً نیاز به فورک‑سپس‑ادغام دارد، یک ماژول جدید v1 را دست‌نخورده نگه می‌دارد، اجازه می‌دهد v2 آزمایش شود و زمانی که آماده شد به‌صورت تمیز مهاجرت می‌کند.

چرا MongoDB و نه Postgres؟

پشت‌صحنهٔ فعلی My Zodiac AI بر روی MongoDB است؛ تغییر آن به معنای تصمیمی زیرساختی است که ربطی به این ویژگی ندارد. مدل سندی نیز به خوبی فصول و ورودی‌های دفترچهٔ شخصی را می‌پوشاند — تو در تو، با طول‌های متغیر، به‌صورت رمزنگاری‌شده به‌صورت blob.

چرا BullMQ گزینهٔ صف است؟

BullMQ بر روی Redis اجرا می‌شود، که پیش از این در استک برای مدیریت نشست و محدودیت نرخ حضور دارد. نیازی به زیرساخت جدید نیست. قابلیت‌های داخلی retry، timeout و observability نیازهای تولید فصل را بدون پیاده‌سازی سفارشی پوشش می‌دهند.

مشخصات بالادستی دقیقاً کجا نوشته شده است؟

مخزن داخلی. اعداد و قراردادهای این صفحه خلاصه‌ای از مصنوعات مدل V بالادست هستند. پست‌های مهندسی عمومی در خوشهٔ وبلاگ My Zodiac AI (برچسب‌دار 'cosmic-story-v2') جزئیات بیشتری از بخش‌های خاص ساخت را بررسی می‌کنند.

امروز My Zodiac AI را امتحان کنید

در حالی که Soulwise موج‌های خود را می‌گشاید، اپلیکیشن اصلی نجوم ما هم‌اکنون در دستان شماست.

محتوای نجومی برای تأمل و سرگرمی است. ویژگی‌های Cosmic Story v2 که در اینجا توضیح داده شده‌اند، در حال توسعه هستند؛ در دسترس بودن آنها ممکن است بدون اطلاع قبلی تغییر کند.