soulwise_persons
ورودیهای آلبوم. ایندکسها روی userId، status و deletedAt. ابتدا حذف نرم؛ حذف کامل اطلاعات شخصی (PII) در 30 روز.
برای مهندسان، مدیران محصول، روزنامهنگاران و جستجوگران مشارکت. تمام خط لوله، چهار مجموعه MongoDB، رویدادهای EDA، دقت مدل‑V، اهداف عملکرد، امنیت و دسترسپذیری — همه در یک صفحه.
هر مرحله دارای یک سرویس، یک قرارداد و یک رویداد است.
یک عمل کاربر — 'generate today's chapter for Sister' — یا یک کرون زمانبندیشده، مانند خلاصهٔ ساعت ۹ صبح روز یکشنبه، یا بهروزرسانی آبوهوای کیهانی هر ۶ ساعت.
کار در صف BullMQ به نام soulwise-chapter-generation قرار میگیرد و دارای زمانسنجی سختِ ۲۸ ثانیهای است. کارهای طولانیمدت متوقف شده و به کاربر بهعنوان «دوباره تلاش کنید» گزارش میشوند.
سرویس ChapterGenerationService پرامپتِ ۴عاملی — زمینهٔ فرد، نجوم، سیگنال و کادنس — را در قالب ۱ ورودی واحد گرد هم میآورد. هیچ دادهٔ شناساییِ خام کاربر عیناً وارد پرامپت نمیشود؛ همهچیز ابتدا پاکسازی میشود.
یک ارائهدهنده هوش مصنوعی از طریق توکن نماد AI_GENERATION_ADAPTER فراخوانی میشود — این ارائهدهنده قابل تعویض است. پاسخ قبل از ادامهدادن برای طول، شکل و ایمنی بررسی میشود.
چهار چیز رخ میدهد: یک طبقهبند بحران زبان بحران را بررسی میکند؛ یک استخراجکننده چیپهای جنبه ۱ تا ۳ چیپ نجومی استخراج میکند؛ یک فیلتر ضد ادعا عبارات ممنوع را حذف میکند؛ بدنه با AES-256 و کلید مدیریتشده توسط پلتفرم رمزگذاری میشود.
این داده در مجموعهٔ مناسب در MongoDB ذخیره میشود — فصلها، یادداشتهای دفترچه، رزونانسها — همراه با ایندکسهای userId و personId برای جستوجوی سریع. ابتدا حذف نرم؛ حذف کامل اطلاعات شخصی پس از ۳۰ روز.
یک رویداد EventEmitter2 — CHAPTER_COMPLETED، JOURNAL_CREATED — پس از تأیید پایگاهداده فعال میشود. ماژول اعلانها آن را دریافت میکند، یک مورد صندوق ورودی ایجاد میکند و بهصورت اختیاری یک پوش ارسال میکند (حداکثر یک بار در روز، ساعات سکوت رعایت میشود).
فرانتاند اثر را از طریق یک فراخوانی API احراز هویتشده دریافت میکند. هاب با محتوای جدید دوباره رندر میشود. اگر کاربر آفلاین بوده باشد، کش نمای دیروز را ارائه میدهد و اثر جدید هنگام اتصال مجدد ظاهر میشود.
فهرستشده برای پرسشهایی که هر یک پاسخ میدهد.
ورودیهای آلبوم. ایندکسها روی userId، status و deletedAt. ابتدا حذف نرم؛ حذف کامل اطلاعات شخصی (PII) در 30 روز.
فصلهای نوشتهشده توسط هوش مصنوعی، بدنهٔ رمزگذاریشده. ایندکسها بر روی personId، userId، generatedAt. چیپهای Aspect بهصورت آرایهای جداگانه برای فیلتر سریع ذخیره میشوند.
بازتابهای نوشتهشده توسط کاربر، بدنهٔ رمزگذاریشده. ایندکسها بر روی userId، personId، createdAt. بدنهٔ متنی ایندکسشده برای جستجو. پرچم «خصوصی — به Luminara تغذیه نشود» برای هر ورودی.
امتیازهای چهاربعدی برای هر پیوند. ایندکس یکتا بر روی personId. پس از نوشتن فصل یا ژورنال، از طریق فراخوانی سرویس دوباره محاسبه میشود.
قانون سختگیرانه: رویدادها فقط پس از تأیید پایگاهداده اجرا میشوند. وابستگیهای بینماژولی از طریق توکنهای تزریق 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؛ بودجهٔ پوش و ساعات سکوت را رعایت میکند.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 تأیید میشود.
از آنجا که مشخصات بالادستی ویژگی را دوباره میسازد و بازسازی داخل یک ماژول موجود یا تجربه v1 را خراب میکند یا بعداً نیاز به فورک‑سپس‑ادغام دارد، یک ماژول جدید v1 را دستنخورده نگه میدارد، اجازه میدهد v2 آزمایش شود و زمانی که آماده شد بهصورت تمیز مهاجرت میکند.
پشتصحنهٔ فعلی My Zodiac AI بر روی MongoDB است؛ تغییر آن به معنای تصمیمی زیرساختی است که ربطی به این ویژگی ندارد. مدل سندی نیز به خوبی فصول و ورودیهای دفترچهٔ شخصی را میپوشاند — تو در تو، با طولهای متغیر، بهصورت رمزنگاریشده بهصورت blob.
BullMQ بر روی Redis اجرا میشود، که پیش از این در استک برای مدیریت نشست و محدودیت نرخ حضور دارد. نیازی به زیرساخت جدید نیست. قابلیتهای داخلی retry، timeout و observability نیازهای تولید فصل را بدون پیادهسازی سفارشی پوشش میدهند.
مخزن داخلی. اعداد و قراردادهای این صفحه خلاصهای از مصنوعات مدل V بالادست هستند. پستهای مهندسی عمومی در خوشهٔ وبلاگ My Zodiac AI (برچسبدار 'cosmic-story-v2') جزئیات بیشتری از بخشهای خاص ساخت را بررسی میکنند.
در حالی که Soulwise موجهای خود را میگشاید، اپلیکیشن اصلی نجوم ما هماکنون در دستان شماست.
محتوای نجومی برای تأمل و سرگرمی است. ویژگیهای Cosmic Story v2 که در اینجا توضیح داده شدهاند، در حال توسعه هستند؛ در دسترس بودن آنها ممکن است بدون اطلاع قبلی تغییر کند.