Allow skill slugs without a platform suffix.
All checks were successful
技能自动化发布 / release (push) Successful in 9s

This commit is contained in:
2026-09-21 11:30:38 +08:00
parent a70da6a076
commit 8c8811e777
10 changed files with 94 additions and 53 deletions

View File

@@ -13,23 +13,24 @@
| ❌ **不修改** | 其他仓库(尤其 `account-manager`)不在本文约束范围内 |
| ✅ **模板占位** | 模板本体的 `your-skill-slug` 占位必须继续通过全部测试 |
**新技能勿仿**历史 2 段无平台形态(如 `reconcile-finance`)或不符合 verb-noun-platform 的旧 repo 名;校验器对历史 repo **不追溯**,但规范中明确标注为反模式。
**新技能**使用「动词-名词」,外部平台可选。不要再为了凑段数追加 `default`。校验器不追溯已上线仓库;已经发布、末尾是 `default` 的技能不用改名。
---
## 2. 命名格式
标准形态(约 95% 新技能):
标准形态:
```text
{verb}-{noun-phrase}-{platform}
{verb}-{noun-phrase}
{verb}-{noun-phrase}-{platform} # 仅当技能绑定外部平台时
```
| 部分 | 规则 |
|------|------|
| **verb** | 1 个词,来自 [动词白名单](#5-动词白名单) |
| **noun-phrase** | 1~3 个词(按 `-` 分段),描述业务对象 |
| **platform** | 1 个词,来自 [平台白名单](#6-平台白名单);可含连字符(如 `single-window`) |
| **platform** | **可选**。没有抖音、小红书、亚马逊这类外部系统时省略。有平台时 1 个词,来自 [平台白名单](#6-平台白名单);可含连字符(如 `single-window`) |
**展示层分工不变:**
@@ -44,8 +45,8 @@
| 约束 | 值 |
|------|-----|
| 格式 | `{verb}-{noun-phrase}-{platform}`(标准型,默认) |
| 总段数(按 `-` 分割) | **3~5 段**(标准型);scope 型见 [§4](#4-三类合法形态) |
| 格式 | `{verb}-{noun-phrase}`;有外部平台时才加 `-{platform}` |
| 总段数(按 `-` 分割) | **2~5 段** |
| 总长度 | **≤ 48 字符** |
| 字符集 | 小写字母、数字、连字符;kebab-case |
| 禁止 | 中文 slug、下划线、**平台放最前**(如 `amazon-download-xxx`) |
@@ -56,12 +57,26 @@
## 4. 三类合法形态
### 4.1 标准型(95%)
### 4.1 无平台(常见)
`verb-noun-platform` 或 `verb-noun-noun-platform`(3~5 段)
`verb-noun` 或 `verb-noun-noun`(2~4 段)
- 第 1 段 ∈ 动词白名单
- 最后 1 段(或 hyphenated 平台的最后 2 段)∈ 平台白名单
- 其余为 noun-phrase(1~3 段)
- **不要**追加 `default`
示例:
- `generate-monthly-statements`
- `reconcile-finance`
- `process-article`
### 4.2 标准型(绑定外部平台)
`verb-noun-platform`(在无平台形态后加平台,总段数仍 ≤ 5)
- 第 1 段 ∈ 动词白名单
- 最后 1 段(或 hyphenated 平台的最后若干段)∈ 平台白名单
- 中间为 noun-phrase(1~3 段)
示例:
@@ -71,19 +86,19 @@
- `enter-sales-receipt-kingdee`
- `fill-export-declaration-single-window`
### 4.2 scope 型(少见)
### 4.3 scope 型(少见)
`verb-noun-scope`
- 最后 1 段 ∈ scope 白名单:`all` | `batch` | `multi` | `default`
- 最后 1 段 ∈ scope 白名单:`all` | `batch` | `multi`
- 第 1 段 ∈ 动词白名单
- 总段数 3~5
- 至少还有一段名词(因此最少 3 段)
示例:`generate-article-all`
> 说明:`geo-generate-article-all` 若作为新技能且不在豁免表、首段 `geo` 不在动词表,应写为 `generate-article-all`。
> `default` 已从 scope 词表移除。它不是平台,也不表示范围。新技能不要写 `generate-article-default` 这类占位。已发布且末尾为 `default` 的仓库保持原 slug;同步本校验后只会警告,不会因此失败。
### 4.3 历史豁免(不校验语义)
### 4.4 历史豁免(不校验语义)
以下 slug 跳过 verb/platform 语义校验(见 `LEGACY_EXEMPT_SLUGS`):
@@ -121,7 +136,7 @@
| lianlian | single-window | export-rebate |
| etax | | |
scope 词表:[`assets/naming/scopes.txt`](../assets/naming/scopes.txt) — `all`、`batch`、`multi`、`default`
scope 词表:[`assets/naming/scopes.txt`](../assets/naming/scopes.txt) — `all`、`batch`、`multi`。不含 `default`。
---
@@ -164,7 +179,7 @@ slug **末段 platform** 与 `account-manager` 中的 `platform_key` **语义对
## 9. 复制新技能流程
1. **先定 slug** — 按本文规范拟定 `{verb}-{noun-phrase}-{platform}`,确认在白名单内且 ≤ 48 字符
1. **先定 slug** — `{verb}-{noun-phrase}`,仅在绑定外部平台时加 `-{platform}`。确认动词/平台在白名单内且 ≤ 48 字符。不要用 `default` 占位。
2. **复制目录** — **推荐** [`tools/scaffold_skill.ps1`](../tools/scaffold_skill.ps1)(`-Slug` 与目录名一致);勿整包复制带走 `.git`
2.5. **清理 Git(若未用 scaffold)** — 删除 `.git`、`.openclaw-skill-template`、`.pytest_cache`;再 `git init` 与 `git remote add origin`
3. **全局替换** — `your-skill-slug` → 新 slug;更新 `SKILL.md`、`constants.py`、文档中的占位
@@ -179,10 +194,12 @@ slug **末段 platform** 与 `account-manager` 中的 `platform_key` **语义对
| slug | 说明 |
|------|------|
| `download-settlement-report-amazon` | 标准型,4 段 |
| `add-product-shopee` | 标准型,3 段 |
| `enter-sales-receipt-kingdee` | 标准型 |
| `fill-export-declaration-single-window` | 标准型,平台含连字符 |
| `generate-monthly-statements` | 无平台 |
| `reconcile-finance` | 无平台,动词 + 一个名词 |
| `download-settlement-report-amazon` | 有平台 |
| `add-product-shopee` | 有平台 |
| `enter-sales-receipt-kingdee` | 有平台 |
| `fill-export-declaration-single-window` | 有平台,平台含连字符 |
| `generate-article-all` | scope 型 |
### ❌ 反例
@@ -191,7 +208,7 @@ slug **末段 platform** 与 `account-manager` 中的 `platform_key` **语义对
|------|------|
| `amazon-download-settlement-report` | 平台在最前 |
| `enter-cross-border-sales-receipt-voucher-kingdee` | 过长、noun 臃肿 |
| `reconcile-finance` | 新技能禁止 2 段无平台 |
| `generate-article-default` | `default` 不是平台;应写成 `generate-article` |
| `download_settlement_amazon` | 非 kebab-case(下划线) |
---
@@ -201,14 +218,14 @@ slug **末段 platform** 与 `account-manager` 中的 `platform_key` **语义对
- **平台前置**:`amazon-download-...`、`shopee-add-...`
- **英文占位 name**:复制后仍保留 `My Skill` 或纯英文 slug 风格名称
- **只改目录名**:`SKILL.md` slug 与 `constants.SKILL_SLUG` 未同步
- **noun 堆砌**:中间段过多导致超 48 字符或难以阅读
- **仿历史 2 段 repo**:`reconcile-finance`、`content-manager` 等
- **用 default 占位**:`generate-article-default`。没有外部平台就省略末段
- **名词堆砌**:中间段过多导致超 48 字符或难以阅读
---
## 12. 演进说明(当前不启用)
当技能库规模 **> 200** 时,可再评估引入 `{domain}-verb-noun-platform` 前缀形态。**当前不启用**,新技能一律使用本文 verb-noun-platform 标准型或 scope 型。
当技能库规模 **> 200** 时,可再评估引入 `{domain}-verb-noun-platform` 前缀形态。**当前不启用**。新技能使用动词-名词;只有绑定外部平台时才使用 verb-noun-platform,或使用 scope 型。
---
@@ -218,9 +235,9 @@ slug **末段 platform** 与 `account-manager` 中的 `platform_key` **语义对
| 历史 slug | 说明 |
|-----------|------|
| `account-manager` | 跨平台账号管理,非 verb-noun-platform |
| `reconcile-finance` | 2 段无 platform |
| `scrape-contacts-lianjia` | 平台名不在当前白名单(链家) |
| `account-manager` | 跨平台账号管理,非动词-名词 |
| `reconcile-finance` | 现已是合法的无平台形态;旧文档曾把它标成反例 |
| `scrape-contacts-lianjia` | 平台名不在当前白名单(链家);新技能若要表达链家,先把平台加入白名单 |
| `skill-template` | 模板仓库本身 |
校验器通过 `LEGACY_EXEMPT_SLUGS` 对模板占位与少数豁免 slug 跳过语义检查;**新复制出去的业务 skill 不在豁免表内**,必须满足 §3 硬约束。