ข้ามไปยังเนื้อหา

เหตุการณ์โดเมน

DomainEventBus เป็นบัสเผยแพร่/สมัครรับแบบกระจายสัญญาณภายในโปรเซส ผู้เผยแพร่เรียก publish(event) ส่วนผู้สมัครรับบริโภคสตรีม on<T>() ที่มีชนิดกำกับ ทุกเหตุการณ์อิมพลีเมนต์ DomainEvent และพก occurredAt มาด้วย

บัสทำงานอยู่ภายใน cc_server ผู้เผยแพร่ทุกตัวและผู้สมัครรับที่มีชีวิตทุกตัวอยู่ที่นั่น ไม่มีไคลเอนต์ใดเห็นบัสนี้ — เซิร์ฟเวอร์ส่งต่อชุดย่อยที่คัดสรรมาแล้วเป็นเฟรม JSON-RPC notifications/* โดยกรองต่อผู้สมัครรับแต่ละรายตามสมาชิกภาพเวิร์กสเปซ

ตัวชี้วัด จำนวน
คลาสเหตุการณ์ที่เป็นรูปธรรม 54
ไฟล์ต้นทาง (packages/cc_domain/lib/core/domain/events/) 14 (บวก domain_event_bus.dart)
ฐานนามธรรมที่ไม่เคยถูกเผยแพร่โดยตรง 1 (TaskLifecycleEvent ซึ่งเป็นลำดับชั้นแบบ sealed)

ทุกเหตุการณ์ในแค็ตตาล็อกด้านล่างอยู่ในไดเรกทอรีเดียวนั้น ไม่มีเหตุการณ์โดเมนที่ถูกประกาศไว้ที่อื่น

เหตุการณ์ เพย์โหลด เกิดเมื่อ
WorkspaceCreated workspaceId เวิร์กสเปซถูกสร้าง
AgentRunCompleted agentId, runId?, workspaceId?, conversationId? เอเจนต์จบการรันหนึ่งครั้ง (สำเร็จหรือล้มเหลว)
AgentAwaitingInput workspaceId, kind, summary, spaceId?, conversationId?, agentId?, agentName? เอเจนต์เริ่มรอมนุษย์: การอนุมัติ คำถาม ask_user หรือการรันที่ถูกพักไว้เพราะข้อมูลรับรอง (kind คือ approval, question หรือ credential)
RepoAdded repoId, path, workspaceId รีโปถูกขึ้นทะเบียน; ทริกเกอร์การทำดัชนีโค้ดเบื้องหลัง
SkillUpdated workspaceId, slug, origin, computedHash, scanVerdict? สกิลถูกติดตั้งหรืออัปเดต พร้อมพกคำตัดสินจากการสแกนห่วงโซ่อุปทานของมันมา

บล็อกแรกคือวงจรชีวิตของ PR เอง บล็อกที่สองคือการเฝ้าดู PR ที่คุณเป็นผู้เขียน: สัญญาณเกี่ยวกับ PR ที่คุณเปิดไว้ โดยแต่ละตัวพก forUserId เพื่อให้การตรวจสอบส่งถึงผู้ที่เกี่ยวข้องแทนที่จะกระจายสัญญาณ

เหตุการณ์ เพย์โหลด เกิดเมื่อ
PullRequestPublished prId, workspaceId, repoOwner, repoName เอเจนต์เปิด PR
PullRequestStatusChanged status, workspaceId, prId?, repoFullName?, prNumber? PR ถูกรวม/ปิด/เปิด/เปิดใหม่/อนุมัติ
PrMerged prId, workspaceId, agentId PR ถูกรวม — สัญญาณแคบ ๆ เฉพาะการรวมที่เก็บไว้สำหรับการวิเคราะห์/การแจ้งเตือน
PrReviewRequested workspaceId, repoOwner, repoName, prNumber, prTitle GitHub ขอให้ผู้ใช้ของเซิร์ฟเวอร์รีวิว (การตรวจสอบการแจ้งเตือน, review_requested)
PrMentioned workspaceId, repoOwner, repoName, prNumber, prTitle ผู้ใช้ของเซิร์ฟเวอร์ถูกกล่าวถึงบน PR (การตรวจสอบการแจ้งเตือน, mention)
ExternalPrMerged workspaceId, repoOwner, repoName, prNumber, prTitle, mergedByLogin? PR ที่ติดตามจากภายนอก (ไม่ใช่ของเอเจนต์) ถูกรวม ตรวจพบโดยการตรวจสอบการแจ้งเตือนของ GitHub; แมปไปยังหมวดหมู่การแจ้งเตือน prMerged
ExternalPrDetected repoOwner, repoName, prNumber, prTitle, author, workspaceId? พบ PR ที่ไม่ใช่ของเอเจนต์ผ่านการตรวจสอบเป็นระยะ — ใช้กับไปป์ไลน์เท่านั้น (ขับ external_pr_welcome) ไม่สร้างการแจ้งเตือน
PrHeadChanged repoOwner, repoName, prNumber, prTitle, previousHeadSha, headSha, workspaceId head SHA ของ PR เคลื่อนไป — ผู้เขียนพุช
ReviewBecameStale workspaceId, spaceId, repoOwner, repoName, prNumber, prTitle, reviewedHeadSha, headSha รีวิวด้วย AI ที่เสร็จสิ้นแล้วไม่ตรงกับ PR ที่มันรีวิวอีกต่อไป เกิดเฉพาะเมื่อมีรีวิวอยู่สำหรับคอมมิตที่ถูกแทนที่ จึงยังคงเป็นสัญญาณแทนที่จะเป็นการ ping ทุกครั้งที่พุช

ทั้งหกตัวพก workspaceId, repoOwner, repoName, prNumber, prTitle และ forUserId แบบไม่บังคับ

เหตุการณ์ เพย์โหลดเพิ่มเติม เกิดเมื่อ
PrMergeReadinessChanged ready, reason PR ที่คุณเป็นผู้เขียนกลายเป็นรวมได้ หรือเลิกเป็นเช่นนั้น
PrReviewDecisionChanged decision, reviewersRemaining, approverLogin? ผู้รีวิวอนุมัติ ขอให้แก้ไข หรือการอนุมัติถูกเพิกถอน
PrChecksStatusChanged failing, failingCheckName?, failingCheckUrl? CI ล้มเหลว หรือกลับมาผ่าน
PrCommentMentioned commentId, authorLogin, bodyPreview, isReviewComment, threadId?, path?, line? มีคนกล่าวถึงคุณในคอมเมนต์ของ PR หรือคอมเมนต์รีวิว
PrThreadReplied commentId, authorLogin, bodyPreview, threadId?, path?, line? มีคนตอบกลับในเธรดรีวิวที่คุณอยู่
PrThreadResolved threadId, commentId?, path?, line? มีคนปิดเธรดรีวิวที่คุณอยู่
เหตุการณ์ เพย์โหลด เกิดเมื่อ
MessageReceived spaceId, messageId, senderName, contentPreview, isAgentMessage, workspaceId?, mentions, requestedByUserId?, senderUserId? มีข้อความใหม่เข้ามา
SpaceCreated spaceId, workspaceId สเปซถูกสร้าง
SpaceDeleted spaceId, workspaceId สเปซถูกลบ
SpaceProvisioningChanged workspaceId, spaceId, status, step? เวิร์กสเปซของสเปซเข้าสู่การจัดเตรียม ไปถึงขั้นตอนหนึ่ง (โคลนรีโป, เช็กเอาต์ PR, ตั้งค่าเอเจนต์) หรือพลิกเป็นพร้อม/ล้มเหลว — สะพานแชทเล่าเรื่องนี้บนการ์ดงานของมัน
เหตุการณ์ เพย์โหลด เกิดเมื่อ
TicketCreated ticketId, workspaceId ตั๋วงานถูกสร้าง
TicketAssigned ticketId, ticketTitle, ticketBody?, ticketUrl?, assignedAgentId?, assigneeType, assignedTeamId?, workspaceId ตั๋วงานถูกมอบหมายให้ Principal หรือทีม
TicketCompleted ticketId งานจบลง (สิ้นสุด)
TicketFailed ticketId, errorMessage เอเจนต์ล้มเหลว (สิ้นสุด)
TicketCancelled ticketId ตั๋วงานถูกยกเลิก (สิ้นสุด)
TicketStatusChanged ticketId, workspaceId, from, to มีการเปลี่ยนสถานะใด ๆ
TicketReassigned ticketId, workspaceId, fromAgentId?, toAgentId? ตั๋วงานถูกมอบหมายใหม่
TicketDetailsUpdated ticketId, workspaceId ชื่อ คำอธิบาย หรือลำดับความสำคัญเปลี่ยน

สตรีมวงจรชีวิตของงานแบบรวม — การรันเอเจนต์ที่ถูกสั่งงานหนึ่งครั้ง มีคีย์เป็น id ของบันทึกการรัน ทุกเหตุการณ์พก taskId, seq ที่เพิ่มขึ้นแบบโมโนโทนิกต่องาน, workspaceId?, agentId? และ phase; แถวด้านล่างแสดงเฉพาะฟิลด์เพิ่มเติมเท่านั้น

เหตุการณ์ เพย์โหลด เกิดเมื่อ
TaskDispatched — งานถูกส่งต่อให้แบ็กเอนด์เพื่อดำเนินการ
TaskRunning — งานเริ่มสร้างเอาต์พุต
TaskWaitingLocalDirectory lockedPath, holderTaskId? งานถูกพักไว้ — งานอื่นถือล็อกพาธบนดิสก์ที่มันต้องการอยู่
TaskProgress note? จุดตรวจความคืบหน้ากลางการรัน
TaskMessage messageType, content ข้อความที่สตรีม (text/thinking/tool_use/tool_result/error); รายงานภายใต้เฟส progress
TaskCompleted summary? งานจบลงอย่างสำเร็จ
TaskFailed errorMessage งานจบลงด้วยข้อผิดพลาด
TaskCancelled — งานถูกยกเลิกก่อนเสร็จสิ้น

enum TaskPhase มีสมาชิก queued ด้วย แต่ไม่มีสิ่งใดเผยแพร่เหตุการณ์ queued — ไม่มีคลาส TaskQueued เฟรมแรกที่สังเกตได้ของงานคือ TaskDispatched

เหตุการณ์ เพย์โหลด เกิดเมื่อ
PipelineRunCompleted workspaceId, pipelineRunId, templateId การรันจบลง
PipelineRunCancelled workspaceId, pipelineRunId, templateId การรันถูกยกเลิก (โดยผู้ใช้หรือโดยระบบ) — เป็นการหยุดโดยเจตนา ไม่ใช่ข้อผิดพลาด
PipelineRunFailed workspaceId, pipelineRunId, templateId, errorMessage การรันล้มเหลว

เผยแพร่เฉพาะการเปลี่ยนสถานะสิ้นสุดเท่านั้น ไม่มี PipelineRunStarted และไม่มีเหตุการณ์ต่อขั้นตอน: ความคืบหน้าของขั้นตอนไปถึงไคลเอนต์ผ่านแถวของตัวการรันเองและสตรีมวงจรชีวิตของงานของเอเจนต์ที่มันสั่งงานไป ไม่ใช่ผ่านบัส

เหตุการณ์ เพย์โหลด เกิดเมื่อ
ActivityLogged id, actorType, actorId?, action, entityType, entityId?, details?, workspaceId?, runId? สร้างรายการร่องรอยการตรวจสอบ
BudgetThresholdCrossed scopeType, scopeId, spentCents, budgetCents, isHardStop การใช้จ่ายเกินเกณฑ์
เหตุการณ์ เพย์โหลด เกิดเมื่อ
WorkspaceMemberAdded workspaceId, userId, role ผู้ใช้เข้าร่วมเวิร์กสเปซ (การแลกคำเชิญหรือการเพิ่มโดยแอดมิน)
WorkspaceMemberRemoved workspaceId, userId สมาชิกถูกลบ — เซสชันที่มีชีวิตของผู้ใช้รายนั้นที่ผูกกับเวิร์กสเปซต้องตรวจสอบการเข้าถึงใหม่ทันที
WorkspaceMemberRoleChanged workspaceId, userId, role บทบาทของสมาชิกเปลี่ยน

สมาชิกภาพคือพื้นผิวตัวตนทั้งหมดบนบัส การสร้างผู้ใช้และการเพิกถอนอุปกรณ์เกิดขึ้นจริง แต่ไม่ได้ถูกเผยแพร่เป็นเหตุการณ์โดเมน — การเพิกถอนถูกบังคับใช้กับเซสชันที่มีชีวิตโดยตรง แทนที่จะถูกส่งผ่านบัส

เหตุการณ์ เพย์โหลด เกิดเมื่อ
CalendarAuthExpired workspaceId, accountEmail โทเค็นรีเฟรช OAuth ของบัญชีที่เชื่อมต่อใช้ไม่ได้อย่างถาวร (เผยแพร่ครั้งเดียวต่อการตัดการเชื่อมต่อหนึ่งครั้ง)
MeetingStartingSoon workspaceId, eventId, title, startTime, meetingUrl? เหตุการณ์ในปฏิทินกำลังจะเริ่มภายในช่วงเวลาล่วงหน้าที่ตั้งค่าไว้
MeetingRecordingStopped workspaceId, meetingId, title, userNotes, transcript, summaryInstructions? การบันทึกการประชุมสิ้นสุดลงและทริกเกอร์ไปป์ไลน์ meeting_summary ที่มีมาในตัว
เหตุการณ์ เพย์โหลด เกิดเมื่อ
RigClosedEvent workspaceId, rigId, reason ริกหายไป พร้อมเหตุผลการปิดของมัน ผู้บริโภคจะดำเนินการเฉพาะกับ backendFailure เท่านั้น — เหตุผลอื่นทุกอย่างเกิดจากการร้องขอหรือมาพร้อมกับ RigReaped
RigControlChanged workspaceId, rigId, controller? มนุษย์เข้าควบคุมริกแบบเบ็ดเสร็จหรือคืนมันกลับ (controller เป็น null เมื่อปล่อย — เหตุการณ์ไม่บันทึกว่าใครเป็นคนปล่อย)
RigReaped workspaceId, rigId, reason, agentId? ระบบเรียกคืนเครื่อง: การว่าง, TTL หรือการยึดคืนเพราะความดันหน่วยความจำ (รายงานเป็น idleTimeout) พร้อมเอเจนต์ที่เป็นตัวขับ

การเปิดริกไม่ใช่เหตุการณ์ การบูตเสร็จสมบูรณ์และแถวของริกพลิกเป็นพร้อม ไม่มีอะไรถูกเผยแพร่ จึงไม่มี RigOpened ให้สมัครรับ

ระบบย่อยหลายระบบที่ดูเหมือนขับเคลื่อนด้วยเหตุการณ์จากภายนอกนั้นไม่ใช่ การที่ไม่มีเหตุการณ์ถูกระบุไว้ที่นี่เพราะการไม่มีอยู่เป็นการตัดสินใจเชิงออกแบบที่ควรรู้ก่อนคุณออกไปมองหาฮุก:

โดเมนย่อย สถานะเคลื่อนที่อย่างไรแทน
หน่วยความจำ record_memory_fact และตัวอื่น ๆ เขียนแล้วคืนค่า ส่วนการเรียกคืนอ่าน ไม่มีสิ่งใดเผยแพร่เมื่อเกิดข้อเท็จจริงหรือความขัดแย้ง
การประสานงาน ข้อเสนอ การอนุมัติข้อเสนอ และการรันไปป์ไลน์ที่ถูกสร้างขึ้นเป็นแถวและการเรียก RPC
เอกสารแผน submit_plan เขียนรีวิชัน การอนุมัติทำให้เกิดการประสานงานขึ้นจริง ทั้งสองอย่างไม่ถูกประกาศ
อาร์ติแฟกต์ publish_artifact / revise_artifact เขียนรีวิชันโดยตรง
การอนุมัติ การยกระดับถูกจัดการภายในเซอร์วิสเวิร์กโฟลว์การอนุมัติ
การซิงค์ตั๋วงาน ตัวประสานงานของผู้ให้บริการสมัครรับเหตุการณ์ตั๋วงานด้านบน ส่วน webhook ขาเข้าถูกนำไปใช้โดยตรง
การรีเฟรชปฏิทิน การซิงค์อัปเซิร์ตเหตุการณ์แล้วไคลเอนต์อ่านใหม่ ไม่มีการกระจายสัญญาณการรีเฟรช
การรวม worktree บันทึกไว้ใน worktree_merge_log และอ่านจากที่นั่น

ผู้สมัครรับทุกตัวด้านล่างถูกสร้างขึ้นภายใน runCcServer (หรือเซอร์วิสที่มันสร้าง) ไม่มีผู้สมัครรับฝั่งไคลเอนต์

ผู้สมัครรับ เหตุการณ์ที่บริโภค
WorkspaceSeeder WorkspaceCreated
การ seed ชุดการประเมินเริ่มต้น (อินไลน์) WorkspaceCreated
การจัดเตรียมสเปซแชท (อินไลน์) SpaceCreated
PipelineTriggerDispatcher ทุก DomainEvent; ทริกเกอร์ที่เปิดใช้แต่ละตัวกรองหาเฉพาะชนิดของตัวเอง
SubPipelineResumeListener PipelineRunCompleted, PipelineRunFailed
PipelineCostRollupListener AgentRunCompleted
BudgetEvaluationListener AgentRunCompleted
MeetingSummaryReconciler PipelineRunCompleted, PipelineRunFailed, PipelineRunCancelled (เฉพาะการรัน meeting_summary)
PipelineStepResumeListener AgentRunCompleted
AgentRunTaskCompleter AgentRunCompleted
GoalSupervisor AgentRunCompleted
CheckerDispatchListener AgentRunCompleted
TeamRoutingService AgentRunCompleted, TicketAssigned
OrchestrationRunListener PipelineRunCancelled, PipelineRunFailed
MultiVendorTicketSyncCoordinator TicketCreated, TicketAssigned, TicketReassigned, TicketStatusChanged, TicketDetailsUpdated
WorktreeGcListener TicketCompleted, TicketCancelled, SpaceDeleted, PrMerged, PullRequestStatusChanged
ChatBridgeService MessageReceived, SpaceProvisioningChanged
ActivityLogPersister ActivityLogged
RigEventListener RigControlChanged, RigReaped, RigClosedEvent — แทรกข้อความแจ้งแบบภาษาธรรมดาเข้าไปในเลนชี้นำของเอเจนต์ที่เป็นตัวขับ
StaleReviewWatcher PrHeadChanged — เผยแพร่ ReviewBecameStale เฉพาะเมื่อมีรีวิวที่เสร็จแล้วสำหรับคอมมิตที่ถูกแทนที่
GitHubPrConversationBridge AgentRunCompleted — การตอบกลับการสนทนาบน PR ขาออก
NotificationFeedRecorder เหตุการณ์ระดับการแจ้งเตือนทั้งยี่สิบสองรายการด้านล่าง
RemoteEventForwarder ยี่สิบสองรายการนั้นบวก TicketReassigned และทุก TaskLifecycleEvent เหตุการณ์สมาชิกภาพทั้งสามรายการเพียงทำให้แคชสมาชิกภาพต่อเวิร์กสเปซของมันเป็นโมฆะเท่านั้น ไม่ได้ถูกส่งต่อเป็นเฟรม
LocalRpcServer / RemoteRelayHost WorkspaceMemberRemoved — ทิ้งการสมัครรับเวิร์กสเปซที่ผู้ใช้รายนั้นผูกไว้ ซ็อกเก็ตยังคงเปิดอยู่

TicketAssigned เป็นสัญญาณการตรวจสอบและการแจ้งเตือน รวมทั้งเป็นทริกเกอร์ของไปป์ไลน์ การมอบหมายให้เอเจนต์บันทึกความเป็นเจ้าของและไม่เริ่มการรันใด ๆ — ไม่มีตัวดิสนพัตช์ตั๋วงาน การมอบหมายให้ทีม (เมื่อตั้ง assignedTeamId) คือข้อยกเว้น: TeamRoutingService สั่งงานหัวหน้าทีม

TicketRemoteSyncHandler ถูกประกาศไว้แต่ไม่เคยถูกสร้างในโค้ดโปรดักชัน วันนี้มันจึงไม่ได้สมัครรับสิ่งใด NotificationEventMapper ฝั่งไคลเอนต์ถูกสร้างขึ้นเฉพาะในเทสต์ของตัวเองเท่านั้น — มันเป็นเศษที่เหลือของเส้นทางภายในโปรเซสจากก่อนการแยกไคลเอนต์/เซิร์ฟเวอร์ ทอสต์ที่มีชีวิตมาจากเฟรมบนสายด้านล่าง

บนเซิร์ฟเวอร์ NotificationFeedRecorder และ RemoteEventForwarder เปลี่ยนเหตุการณ์เหล่านี้เป็นเฟรมบนสาย notifications/* (notification_wire.dart) บนไคลเอนต์ RpcNotificationMapper → mapNotificationFrame เปลี่ยนเฟรมเป็น AppNotification

มีสิบเจ็ดหมวดหมู่การแจ้งเตือนพอดี เหตุการณ์หลายรายการแมปไปยังวิธีบนสายมากกว่าหนึ่งวิธี เพราะเฟรมพกความเปลี่ยนแปลง (ล้มเหลวเทียบกับกลับมาผ่าน) ขณะที่หมวดหมู่พกคำถาม (“CI กำลังทำอะไรอยู่?”)

หมวดหมู่ เหตุการณ์ต้นทาง วิธีบนสาย
newMessage MessageReceived notifications/message_received (กล่าวถึงคุณ)
agentRunCompleted MessageReceived notifications/message_received (is_agent_message, ไม่ได้กล่าวถึงคุณ)
agentAwaitingInput AgentAwaitingInput notifications/agent_awaiting_input
ticketAssigned TicketAssigned notifications/ticket_assigned
ticketStatusChanged TicketStatusChanged notifications/ticket_status_changed
pullRequestPublished PullRequestPublished notifications/pr_published
prMerged PrMerged notifications/pr_merged
prMerged ExternalPrMerged notifications/external_pr_merged
prMentioned PrMentioned notifications/pr_mentioned
prMentioned PrCommentMentioned notifications/pr_comment_mentioned
reviewRequested PrReviewRequested notifications/pr_review_requested
reviewStale ReviewBecameStale notifications/review_stale
prMergeReadiness PrMergeReadinessChanged notifications/pr_ready_to_merge / pr_merge_blocked
prReviewDecision PrReviewDecisionChanged notifications/pr_approved / pr_changes_requested / pr_review_dismissed
prChecksStatus PrChecksStatusChanged notifications/pr_checks_failed / pr_checks_recovered
prThreadActivity PrThreadReplied notifications/pr_thread_replied
prThreadActivity PrThreadResolved notifications/pr_thread_resolved
meetingStartsSoon MeetingStartingSoon notifications/meeting_starting_soon
calendarAuthExpired CalendarAuthExpired notifications/calendar_auth_expired
rigStatusChanged RigControlChanged notifications/rig_control_changed
rigStatusChanged RigReaped notifications/rig_reaped
rigStatusChanged RigClosedEvent notifications/rig_closed

เฟรมการเข้าควบคุมริกไม่ได้ถูกส่งกลับไปยังผู้ที่เข้ายึดการควบคุม การปล่อยไม่ถูกกรอง (เหตุการณ์ไม่บันทึกว่าใครปล่อย) และเฉพาะการปิดด้วย backendFailure เท่านั้นที่สร้างเฟรม rig_closed — เหตุผลอื่น ๆ นั้นเกิดจากการร้องขอหรือถูกครอบคลุมอยู่แล้วด้วยเฟรมการยึดคืน

AgentAwaitingInput เผยแพร่โดย AgentAwaitingInputPublisher ซึ่งเฝ้าดูรายการใหม่ในรีจิสทรีการอนุมัติและรีจิสทรีการบล็อกจากข้อมูลรับรอง และได้รับแจ้งเรื่องคำถาม ask_user แต่ละข้อจาก AgentQuestionService การรอหนึ่งครั้งคือเหตุการณ์หนึ่งรายการ และไม่มีการเผยแพร่สิ่งใดเมื่อการรอสิ้นสุดลง

หมวดหมู่ PR ที่คุณเป็นผู้เขียนทั้งห้าหมวดพก forUserId จึงไปถึงผู้เขียนแทนที่จะไปถึงทุกคนในเวิร์กสเปซ

RemoteEventForwarder ส่งต่อ TicketReassigned เพิ่มเติมเป็น notifications/ticket_reassigned และทุก TaskLifecycleEvent เป็น notifications/task_<phase> ทั้งสองอย่างไม่แมปไปยังหมวดหมู่การแจ้งเตือน — มันขับ UI แบบสด ไม่ใช่ศูนย์การแจ้งเตือน เหตุการณ์สมาชิกภาพไม่ถูกส่งต่อเป็นเฟรม: มันทำให้แคชของตัวส่งต่อเป็นโมฆะ และโฮสต์เซสชันจะทิ้งการสมัครรับเวิร์กสเปซของสมาชิกที่ถูกลบ