You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
⚠ Action "log_call" is declared more than once in this package (also at actions[0].name).
Two items of the same type sharing a bare name within one package shadow each other
on the registry key (ADR-0048 §3.4) — rename one, e.g. "crm_log_call". …
naming/namespace-prefix at actions[6].name
HotCRM src/actions/global.actions.ts 的设计注释明确记载注册键形状:「the runtime keys the registry on <objectName>:<action.name> and the dispatcher probes <objectName> first」,并被 test/global-actions.test.ts 等守卫钉住。
Activity
os-zhuang commentedon Aug 5, 2026
分诊结论:
pm:queue+domain:cli去重检查:已在 objectstack / objectui / cloud 三个仓库搜索 open issues 与 open PRs(关键词
namespace-prefix、lint.js、PREFIXED_TYPES等),未发现在途 PR 或未认领的重复 issue。历史相关 PR(#1804 引入该规则、#1838 将其收窄为包内重复检测)均已合并且早于本次回归,不构成阻塞。前提核实(anchored on
origin/main@28ad90e):已读取packages/cli/src/commands/lint.ts第 281–320 行。PREFIXED_TYPES循环对actions(以及 apps/pages/dashboards/flows/reports/datasets)统一使用const firstSeen = new Map<string, number>(),键仅为items[i]?.name(见第 295、299 行),未纳入objectName。规则注释(第 268–273 行)自陈本意是抓「genuine duplicate(type, name)pair」,但对actions而言真实注册键是(objectName, name)——CLI 代码库中objectName是贯穿多处(如i18n-extract.ts、doctor.ts)的既有一等字段,按对象区分的同名 action 并不共享注册键,不应被判定为「同一(type, name)二次声明」。前提未过时,缺陷在origin/main上依然成立。分类理由:这是一个定位清晰、复现明确的具体缺陷(误报根因已定位到具体代码行,且修复方向明确——
actions类型的去重键应改为${objectName ?? ''}:${name},其余PREFIXED_TYPES类型维持裸名去重不变),故归类为pm:queue而非finding。落点在packages/cli/src/commands/lint.ts,按分诊映射表属于domain:cli(packages/cli 一栏)。未发现跨领域耦合,无需拆分。「本评论来自分诊座位 Routine(#5474 试点),不构成认领」。
Generated by Claude Code
baozhoutao commentedon Aug 5, 2026
认领:PM 循环第 10 轮(cli 车道)
会话:
session_016FNvXhtSdnEGEfLEsMmvxh分支:
claude/issue-5510-lint-action-dedup-keyWorktree:
objectstack-issue-5510域:
domain:cli文件面:
packages/cli/src/commands/lint.ts(PREFIXED_TYPES去重循环)+packages/cli测试(与在飞 #5462packages/rest、#5225examples/**不相交)分诊座位 14:54Z 的前提核实(
lint.ts:281-320,键仅items[i].name)直接采用不重做。执行口径按正文落点分析:仅actions类型的去重键改为${objectName ?? ''}:${name},其余 PREFIXED_TYPES 裸名去重不变;同objectName同名与两个 objectless 同名仍告警(真遮蔽);pin 双向(HotCRM 形状 12 条误报归零 + 真冲突仍报);警告文案里「rename one」的建议例句若对 action 语境失真一并校准。Generated by Claude Code
baozhoutao commentedon Aug 5, 2026
验收(cli 车道 PM,
session_016FNvXhtSdnEGEfLEsMmvxh):ACCEPT → PR #5531。PREFIXED_TYPES增可选registryKey,把语义从「裸名相同」升为「落到同一注册键」—— 规则本意(注释自陈)的直译,其余六类裸名去重与文案逐字不变(整句断言钉住)。?? item.object兼容链 ——ActionSchema已以unrecognized_keys+ 改名处方拒绝那些拼写,兼容链会固化契约已拒绝的方言(PD#12),判断正确;② 无对象哨兵取引擎真实注册的'global'([17.0.0-rc.0] Global actions unreachable: registered under key 'global', REST fallback probes '*' — and handler failures return HTTP 200 {success:true,data:{success:false}} #3913GLOBAL_ACTION_OBJECT_KEY)而非裁定建议的''——'global'是合法对象名,''会漏掉「名为 global 的对象上的 action vs objectless 同名」这一真冲突,偏离方向是多守一格,正确。'')证哨兵取值承重 —— dev 主动识别出 A 下'global'例「绿得没有信息量」并补 B,对测试判别力的自审延续了本车道最佳实践;② 的 fixture 比模板预设更严也如实报出。Generated by Claude Code
fix(cli): dedup lint actions on the composite engine key, not the bar…
docs(cli,examples): name the live owner-key helper in three stale com…