/** * 六个活动槽位的**退役名单** —— 槽位时代到此为止(2026-07-31 清账)。 * * 这个文件从前装着六份「契约就绪、实现留白」的占位清单:编排层跑通期, * 靠它们让流走得动。六个真活动包(`activities/quote-*`)全部转正之后, * 占位清单就该走 —— 留着它们不是「多一个备份」,是**三处会骗人的重影**: * * · 活动库与试跑台上并排两个同名活动,选错一个就试了个空壳; * · 它们声明的 `project.*` / `intel.*` / `customer.*` / `supplier.*` 台账, * 与真活动包的 `quote_*.*` 是**同一批业务对象的两套地址** —— * 数据域那一屏上「统一受理记录」「替代对标表」「报价草案」各有两份, * 人分不出该看哪一个(实测 12 对重影,旧的那 19 张表一行数据都没有); * · 工具授权面也各留一份,治理台的授权清单跟着翻倍。 * * 所以这里只剩一件事:**把它们请出去**。名单里的活动播种时一律卸载; * 卸不掉就如实说(多半是还有在途任务引着它),不掀翻播种。 * 物化出来的表不由这里删 —— 台账的规矩是「只增不破坏」, * 清空壳表是一次性的人工决定(2026-07-31 已在开发库执行),不该写进播种。 */ import type { Container } from './container.ts'; /** 已退役的槽位 —— 真活动包顶替它之后,库里那一份也该走 */ const RETIRED_SLOTS = [ 'rfq-intake', 'alt-selection', 'sourcing-inquiry', 'cost-pricing', 'quote-negotiation', 'intel-archive', ] as const; export async function installSlots(container: Container): Promise { for (const activityId of RETIRED_SLOTS) { const installed = await container.registry .get(activityId) .then((card) => card !== undefined) .catch(() => false); if (!installed) continue; try { await container.registry.uninstall(activityId); process.stdout.write(` 槽位 ${activityId} 已退役卸载(真活动包顶替)\n`); } catch (error) { process.stdout.write( ` 槽位 ${activityId} 卸不掉:${error instanceof Error ? error.message : String(error)}\n`, ); } } }