背景
#2929(已裁决关闭)确认:UI 包不引入任何 @objectstack/* 依赖——包括 type-only devDependency。理由:那会把「@object-ui/* 不依赖 @objectstack/*」从可机械执行的绝对规则变成带例外的条件规则,而 workspace 边界守卫(#3207 那类)恰恰依赖规则绝对。
但 packages/plugin-chatbot/src/usePendingActions.ts 手抄了两个 wire 类型(PendingActionStatus / PendingActionRow ↔ framework 导出的 AiPendingActionStatus / AiPendingAction),漂移无人看守——#2929 称之为 canary,但 canary 也要有人听。
任务
在边界外加一条 parity 守卫:镜像类型与 SDK 导出类型互相可赋值(双向),漂移即红。
验收
- sabotage:手改镜像类型任一字段 → 守卫红;还原 → 绿。
plugin-chatbot 的依赖清单零变化。
排期:v17 后(非协议变更,不占发版窗口)。
Refs: #2929(裁决)、#3207(范式)。
Generated by Claude Code
背景
#2929(已裁决关闭)确认:UI 包不引入任何
@objectstack/*依赖——包括 type-only devDependency。理由:那会把「@object-ui/*不依赖@objectstack/*」从可机械执行的绝对规则变成带例外的条件规则,而 workspace 边界守卫(#3207 那类)恰恰依赖规则绝对。但
packages/plugin-chatbot/src/usePendingActions.ts手抄了两个 wire 类型(PendingActionStatus/PendingActionRow↔ framework 导出的AiPendingActionStatus/AiPendingAction),漂移无人看守——#2929 称之为 canary,但 canary 也要有人听。任务
在边界外加一条 parity 守卫:镜像类型与 SDK 导出类型互相可赋值(双向),漂移即红。
scripts/__tests__/(turbo run type-check --filter=@object-ui/plugin-detail必定失败:@object-ui/permissions只在 peerDependencies,^build因此不构建它 #3207 的 workspace 边界守卫同款位置——根级测试不进入任何包的依赖图);类型断言可用 vitestexpectTypeOf或等价手段。packages/plugin-chatbot/package.json保持零@objectstack/*条目(dev 也不行)。守卫本身不得反过来破坏它要守的边界。验收
plugin-chatbot的依赖清单零变化。排期:v17 后(非协议变更,不占发版窗口)。
Refs: #2929(裁决)、#3207(范式)。
Generated by Claude Code