Parent RFC : #254
Scope
Phase 0 前置基础设施,没有这些 follow-up sub issues 无法启动。本 issue 只负责提供框架脚手架和 infra 验证 ——具体 domain 的迁移动作(例如 Lark 把 encrypt_key 从 proto 搬到 secret manager)属于对应 domain 的 sub issue。
Tasks
IProjectionWriteDispatcher.DeleteAsync 加法 (见 RFC §6 / §7.1 / §17.1)
位置:framework-level (src/Aevatar.CQRS.Projection.Runtime.Abstractions/),不在 Channel.Abstractions——这是跨 domain 受益的 framework promotion
当前 IProjectionWriteDispatcher<T> / IProjectionWriteSink<T> 只有 UpsertAsync
PerEntryDocumentProjector 的 Tombstone 路径必须有物理 DeleteAsync(string key, CancellationToken ct) 才能落地,否则 projection store 无限膨胀
独立 PR 先合入,是 [Channel RFC] Base class extraction (PerEntryDocumentProjector + ISchedulable) #259 PerEntryDocumentProjector 和所有 channel sub issues 的前置
Orleans Streams persistent provider validation harness (见 RFC §9.5.6.1)
部署 EventHubs namespace
写最小 validation harness:consumer 订阅 stream,OnNextAsync 分别正常返回 / 抛异常;观察"抛异常的 event 是否在下一次 Acquire / 重连后重新送达"
判定准则 :throw → redeliver(期望)→ 可用;throw → commit checkpoint(行为不符)→ EventHubs 不可 作为 durable inbox provider,必须 fallback 到 Kafka 或实现 manual-checkpoint wrapper
这是 Phase 1 的前置 blocker :validation harness 测试成功后才开始实施 Aevatar.GAgents.Channel.Runtime
Secret manager 集成脚手架 (见 RFC §9.6 / §17.3)
ICredentialProvider 接口定义 + AuthContext record——位置:framework-level (建议 src/Aevatar.Integration.Auth.Abstractions/ 或现有 Aevatar.Configuration / SecretManager 相邻层),不在 Channel.Abstractions。跨 domain 受益范围见 RFC §17.3(LLM / connector / NyxID / channel 多 domain)
BotRegistrationEntry.credential_ref 字段在 proto 启用(具体字段用法由 adapter migration 消费)
本 issue 不做任何 domain 的具体 credential 迁移 ——Lark encrypt_key / Slack signing_secret / 等从明文到 credential_ref 的迁移归各 adapter sub issue(Lark 归 [Channel RFC] Lark adapter migration (LarkPlatformAdapter → LarkChannelAdapter + group chat + streaming) #261 ,Slack / Discord 归未来 sub issue)
Acceptance
注:Lark encrypt_key 从 proto 迁到 secret manager 的实际动作 = #261 (Lark adapter migration) scope ,不在本 issue acceptance 里。本 issue 只保证迁移动作的"工具"可用(即 3 个 acceptance 条目齐备)。
References
RFC §6 复用现有抽象(第 6 节)
RFC §9.5.6.1 Phase 0 provider validation
RFC §9.6 Credentials / security boundary
RFC §17.1 / §17.3 Framework promotion proposals(本 issue task 1 + 3 的 framework-level 定位依据)
Parent RFC: #254
Scope
Phase 0 前置基础设施,没有这些 follow-up sub issues 无法启动。本 issue 只负责提供框架脚手架和 infra 验证——具体 domain 的迁移动作(例如 Lark 把
encrypt_key从 proto 搬到 secret manager)属于对应 domain 的 sub issue。Tasks
IProjectionWriteDispatcher.DeleteAsync加法(见 RFC §6 / §7.1 / §17.1)src/Aevatar.CQRS.Projection.Runtime.Abstractions/),不在Channel.Abstractions——这是跨 domain 受益的 framework promotionIProjectionWriteDispatcher<T>/IProjectionWriteSink<T>只有UpsertAsyncPerEntryDocumentProjector的 Tombstone 路径必须有物理DeleteAsync(string key, CancellationToken ct)才能落地,否则 projection store 无限膨胀PerEntryDocumentProjector和所有 channel sub issues 的前置Orleans Streams persistent provider validation harness(见 RFC §9.5.6.1)
OnNextAsync分别正常返回 / 抛异常;观察"抛异常的 event 是否在下一次 Acquire / 重连后重新送达"Aevatar.GAgents.Channel.RuntimeSecret manager 集成脚手架(见 RFC §9.6 / §17.3)
ICredentialProvider接口定义 +AuthContextrecord——位置:framework-level(建议src/Aevatar.Integration.Auth.Abstractions/或现有Aevatar.Configuration/SecretManager相邻层),不在Channel.Abstractions。跨 domain 受益范围见 RFC §17.3(LLM / connector / NyxID / channel 多 domain)BotRegistrationEntry.credential_ref字段在 proto 启用(具体字段用法由 adapter migration 消费)encrypt_key/ Slacksigning_secret/ 等从明文到credential_ref的迁移归各 adapter sub issue(Lark 归 [Channel RFC] Lark adapter migration (LarkPlatformAdapter → LarkChannelAdapter + group chat + streaming) #261,Slack / Discord 归未来 sub issue)Acceptance
IProjectionWriteDispatcher<T>.DeleteAsync+IProjectionWriteSink<T>.DeleteAsyncmerged(framework-level,非Channel.Abstractions)ICredentialProviderinterface +AuthContextrecord +credential_refproto field scaffold merged 到 framework 层(per RFC §17.3)References