refreshMailInbox() აღადგენს/აუქმებს emails-infinite და ხელახლა იღებს სიას, საქაღალდეებს, ანგარიშებს და ფილტრის ნიშნულების რაოდენობას ერთი გავლით.new-email: მყისიერი refreshListNow({ resetPages: true }) — დებაუნსის გარეშე; ახალი წერილი ყოველთვის პირველ გვერდზე ჩნდება.GlobalMailSSE: useMailPeriodicRefresh — 30 წამის სარეზერვო გამოკითხვა ინარჩუნებს სიისა და მრიცხველების სინქრონიზაციას, როდესაც SSE ჩავარდნილია.refetchInterval ‑ზე useAccounts/useFolders; ჩამოშლილი 120 წამიანი სიის გამოკითხვა (4 წმ syncWarmup მხოლოდ საწყისი სინქრონიზაციის დროს).emails_bulk_updated გადაცემულია ‑ში sse.go (Redis + EventBus); ფრონტენდი უკვე უსმენდა, მაგრამ სერვერი არასდროს აქვეყნებდა ბრაუზერის ნაკადზე.folder_updated: ფრონტენდის დამმუშავებელი იწვევს ატომურ მეტა განახლებას.resetAccountSync: InvalidateEmailCache + RefreshUnreadCounts + SSE emails_bulk_updated (action: reset_sync).OnNewEmail: MemCache ინვალიდაცია Redis-ის გარეშე (Mono).removeQueries(["emails-infinite"]) reset sync‑ზე; GlobalMailSSE აპლიკაციის განლაგებაში; syncWarmup სწრაფი გამოკითხვა, როცა სია <40 წერილი.scheduleListRefresh ცვლის ბლოკირებად fetchingRef — სია აღარ იჭედება პირველ SSE პარტიაზე.RefreshUnreadCounts: tag smart_category პირველი; შემომავალი წაუკითხავი გამორიცხავს smart-category წერილებს (ემთხვევა სიის ხედს).buildFilterWhere / GetEmailCount: იგივე გამორიცხვა ინსტრუმენტთა ზოლის ნიშნულებისთვის vs გვერდითი ზოლის.email-folder-counts.normalizeEmailHTML → wrapEmailForIframe; XSS საზღვარი არის iframe srcdoc CSP.sanitizeNode ‑ში email_normalize.go; ტესტები განახლდა.emailHoverCursor iframe-ის გადაფარვაზე (pointer ბმულებზე/ღილაკებზე, zoom-in სურათებზე); coreStyles + .email-simple-content CSS.GetActiveFilePaths: წაშლილი LIMIT 10000 (SQLite + Postgres) — GC აღარ განიხილავს ვალიდურ .eml ფაილებს, როგორც ობოლებს, დიდ საფოსტო ყუთებზე.syncInboundFlags: ~30 წმ გამოკითხვა — FETCH FLAGS 300 ბოლო სუფთა შეტყობინებისთვის; \Seen / \Flagged / \Answered სერვერი → DB (წაკითხული/წაუკითხავი ორივე მიმართულებით + unread_count).ApplyServerEmailFlags: ატომური გამოყენება გარეშე is_dirty_locally; ცვლის მხოლოდ-წაკითხვად შემომავალ გზას.syncFlags: \Seen, \Flagged, \Answered დაჯგუფებული STORE (200 UID); ბინძური რიგები ატარებენ სამივე ველს.emails.is_answered; მოდელი + API is_answered.MarkEmailAnsweredByMsgID გაგზავნისას (in_reply_to) → dirty → IMAP \Answered.\Flagged / \Answered ახალი შეტყობინების მოძიებისას.email_updated დროშის ველებით; MemCache ინვალიდაცია Redis-ის გარეშე (Mono).email_updated.UnilateralDataHandler CheckWorker-ზე — EXISTS აღვიძებს IDLE ციკლს → checkNewEmails (იყო გათიშული wakeUp არხი).IDLETimeout + IDLEWatchdog -დან timing.go (ცვლის მყარად ჩაწერილ 14 წთ-იან განახლებას).syncNonInboxFolders ყოველ FolderScanInterval (5 წთ / 2 წთ Mono) მომხმარებლის ციკლში.syncFlags: გასუფთავება is_dirty_locally მხოლოდ წარმატებული STORE საქაღალდისთვის.RunRules -ში ProcessMessageStreamToFolder მხოლოდ მაშინ, როდესაც isNewEmail.GetEmailIDByFolderUID + ლოკალური DeleteEmail როდესაც სერვერს არ აქვს UID.last_sync_uid enqueue-ს შემდეგ.resolveDraftsFolder() ლოკალიზებული / SPECIAL-USE საფოსტო ყუთების სახელებისთვის.syncBatchDelay: folder sync-სა და enqueue-ს ჯგუფებს შორის შეზღუდვა.UPDATE_CHANNEL image build-ის დროს ჩართული (stable / beta); normalizeUpdateChannel() license ping-ზე.maxramas/rms-mail; გამოცემა + როლი -ში tag {m|u|t}[-ui]-{latest|beta|test|semver}.m-latest, m-ui-latest, u-beta, m-test, u-3.0.7.bp-*.sh, beta-*.sh, build-and-push-test.sh, ყველა docker-compose-*.yml.rms-mail-m, rms-mail-m-ui, … და ძველი latest-m / rms-mail-ui:latest-m.WakeUpAccountNow: მყისიერი sync consumer-ის გაღვიძება (IDLE push, email-ის გახსნა, მომხმარებლის მოქმედებები) — jitter-ის გარეშე; WakeUpAccount ინარჩუნებს 0–30 წმ jitter-ს restart-ებისთვის.RequestFlagRefresh: email-ის გახსნა → queue-ში ჩასმა შემდეგი inbound-ისთვის FETCH FLAGS + WakeUpAccountNow.inboundFlagSyncLimit 2000 თითო ანგარიშზე (იყო 300).PurgeEmailLocalFiles მანამდე DeleteEmail როდესაც სერვერის UID აღარ არსებობს — დაშიფრული შიგთავსი წაიშლება დისკიდან.{ "event": "email.received", "email": { ... } } (WebhookEventPayload).has_secret on webhook API-ზე; UI (ხელმოწერილი) ინდიკატორი — საიდუმლო არასდროს ჩამოთვლილი.RunRules მხოლოდ ახალ ინგესტი (isNewEmail) — განმეორებითი წესები არ მუშაობს ხელახალი სინქრონიზაციისას.accountId.?token=: HTTP 400 ყველგან, გარდა /mcp/* legacy SSE.is_answeredIF NOT EXISTS მიგრაცია 023-ს შეეძლო გამოეტოვებინა სვეტი LibSQL-ში, ხოლო მონიშნული იყო როგორც გამოყენებული → /api/emails500.addColumnIfMissing + ensureMonoEmailColumns გაშვებისას; მიგრაცია 023 ჩვეულებრივი ADD COLUMN.TestInitSchemaRepairsMissingIsAnswered.email-viewer ქვეკომპონენტები; mail-inbox-layout + inbox hooks; api-client.ts.is_answered UI + SSE ფლაგის ქეშის პაჩები.:3000 (Next გადაწერები /api, /mcp, /internal).requestPublicBaseURL() — FRONTEND_URL + X-Forwarded-*; MCP SSE შეტყობინების URLs HTTPS-უსაფრთხო.reverse-proxy.md — Mono / Unified production proxy (aaPanel, nginx).<meta> ელფოსტის ფრაგმენტებიდან (iframe viewport კონსოლის გაფრთხილებები).; (SQLite მიგრაციის გამყოფი).mcp-tab render-დროის გასაღების გადაწყვეტა (ESLint CI).IMAP_PER_HOST_CONN ზღუდავს პარალელურ dials თითო ჰოსტზე; IDLE/სინქრ. სესიები აღარ იკავებენ სლოტებს (ასწორებს Gmail მრავალ ანგარიშის სლოტის timeout-ებს cap ≈ 2×accounts).50 ჩუმად უკან დაბრუნდა ნაგულისხმევ 10-ზე)..env: IMAP_PER_HOST_CONN, sync pool ცვლადები ჩართულია ყველა prod/test compose ფაილში + მაგალითები.last_sync_error აჩვენებს რეალურ ჩავარდნას; invalid_grant → ფატალური (ხელახალი ავტორიზაცია); token-ის განახლების შემდეგ დაუყოვნებელი ხელახალი კავშირი (SyncWorker + CheckWorker).