@alanwang-merit/meritdata-platform-skill-package 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,260 +0,0 @@
1
- # skill-authoring-workflow
2
-
3
- > 新建 skill 的标准工作流:模板 + 校验清单 + 流程。
4
-
5
- ---
6
-
7
- ## 1. 新建 skill 流程
8
-
9
- ```
10
- 1. 选定 layer / sub-layer / stack
11
-
12
- 2. 复制模板
13
-
14
- 3. 填 SKILL.md frontmatter
15
-
16
- 4. 写触发 / 不触发 / 前置约束 / 路由
17
-
18
- 5. 编写 references/*.md(详细文档)
19
-
20
- 6. 运行 skill-vetter 校验
21
-
22
- 7. 提交 PR
23
-
24
- 8. 架构组 review
25
- ```
26
-
27
- ## 2. 模板
28
-
29
- ### 2.1 SKILL.md 模板
30
-
31
- ```yaml
32
- ---
33
- name: meritdata-platform-<topic>
34
- description: <一句话描述 + 触发关键词>。当用户说"<关键词1> / <关键词2> / <关键词3>"时使用。
35
- metadata:
36
- version: "1.0.0"
37
- risk: low|medium|high
38
- layer: L1 | L2 | L3 | L4
39
- sub-layer: L2-M | L2-C | L2-F | L3-C | L3-F | L4-T
40
- stack: methodology | java | frontend | tool
41
- ---
42
-
43
- # meritdata-platform-<topic>
44
-
45
- ## 触发
46
-
47
- - 用户说"<关键词1>"
48
- - 用户说"<关键词2>"
49
- - <场景 3>
50
- - <场景 4>
51
-
52
- ## 不触发
53
-
54
- - <场景 A>(→ `<其他 skill>`)
55
- - <场景 B>(→ `<其他 skill>`)
56
- - <场景 C>(→ `<其他 skill>`)
57
-
58
- ## 前置约束
59
-
60
- - 必须先读 `<rules 文件 1>`
61
- - 必须遵守 `<rules 文件 2>` §章节
62
- - 必须引用 `<rules 文件 3>`
63
-
64
- ## 路由
65
-
66
- - [guide.md](references/guide.md) — <一句话说明>
67
- - [topic-a.md](references/topic-a.md) — <一句话说明>
68
- - [topic-b.md](references/topic-b.md) — <一句话说明>
69
- ```
70
-
71
- ### 2.2 references/*.md 模板
72
-
73
- ```markdown
74
- # <标题>
75
-
76
- > <一句话说明本文件主题>。
77
-
78
- ---
79
-
80
- ## 1. <章节 1>
81
-
82
- <内容>
83
-
84
- ### 1.1 <子章节>
85
-
86
- ```java
87
- // 代码示例
88
- ```
89
-
90
- ### 1.2 <子章节>
91
-
92
- <内容>
93
-
94
- ## 2. <章节 2>
95
-
96
- <内容>
97
-
98
- ---
99
-
100
- ## ❌ 反模式
101
-
102
- ### <反模式 1>
103
-
104
- ```java
105
- // ❌ 错
106
- ```
107
-
108
- ```java
109
- // ✅ 正确
110
- ```
111
-
112
- ---
113
-
114
- ## 关联阅读
115
-
116
- - [guide.md](guide.md) — <一句话>
117
- - [SKILL.md](../SKILL.md)
118
- ```
119
-
120
- 详见 [templates/SKILL-template.md](templates/SKILL-template.md) 和 [templates/references-template.md](templates/references-template.md)。
121
-
122
- ## 3. 命名规范
123
-
124
- ### 3.1 Skill 命名
125
-
126
- ```
127
- meritdata-platform-<topic>
128
- ```
129
-
130
- | 类别 | 命名示例 |
131
- |------|---------|
132
- | L1 入口 | `meritdata-platform-playbook` |
133
- | L2 方法论 | `meritdata-platform-code-spec` |
134
- | L2 平台能力 | `meritdata-platform-bpm` |
135
- | L3 单点 API | `meritdata-platform-cache` |
136
- | L4 工具 | `meritdata-bootstrap-2nd-dev` |
137
-
138
- ### 3.2 文件命名
139
-
140
- | 类型 | 规则 |
141
- |------|------|
142
- | SKILL.md | 固定名 |
143
- | references/ | kebab-case.md |
144
- | 索引文件 | guide.md / README.md |
145
-
146
- ## 4. 前置约束写法
147
-
148
- **必须**引用 rules 文件,**禁止**重复 rules 正文:
149
-
150
- ```markdown
151
- ## 前置约束
152
-
153
- - 必须遵守 [`rules/code-dev-rules.md`](../../rules/code-dev-rules.md) §八
154
- - 必须遵守 [`rules/meritdata-platform-data-boundary.md`](../../rules/meritdata-platform-data-boundary.md) §1.1
155
- - 必须引用 [`rules/naming-conventions-rules.md`](../../rules/naming-conventions-rules.md)
156
- ```
157
-
158
- ## 5. 路由写法
159
-
160
- **必须**指向 `references/*.md`,**禁止**指向 rules:
161
-
162
- ```markdown
163
- ## 路由
164
-
165
- - [guide.md](references/guide.md) — 总览
166
- - [topic-a.md](references/topic-a.md) — 主题 A
167
- - [topic-b.md](references/topic-b.md) — 主题 B
168
- ```
169
-
170
- ## 6. 校验清单
171
-
172
- 新建 skill 后,跑 [skill-vetter](../skill-vetter/README.md):
173
-
174
- ```bash
175
- bash tools/skill-vetter/run.sh meritdata-platform-new-skill
176
- ```
177
-
178
- 通过条件:
179
-
180
- - [ ] frontmatter 含所有必填字段
181
- - [ ] 4 大章节齐全(触发 / 不触发 / 前置约束 / 路由)
182
- - [ ] SKILL.md 行数 ≤ 60
183
- - [ ] references/ 至少 1 个文件
184
- - [ ] 前置约束引用 rules(不重复正文)
185
- - [ ] 路由指向 references/(不指向 rules)
186
-
187
- ## 7. PR 模板
188
-
189
- ```markdown
190
- ## 新建 skill: meritdata-platform-<topic>
191
-
192
- **Layer**: L2-M / L2-C / L2-F / L3-C / L3-F / L4-T
193
- **Stack**: methodology / java / frontend / tool
194
- **Risk**: low / medium / high
195
-
196
- ### 背景
197
-
198
- <为什么需要这个 skill>
199
-
200
- ### 内容
201
-
202
- - SKILL.md(~38 行):触发 / 不触发 / 前置约束 / 路由
203
- - references/guide.md:总览
204
- - references/topic-a.md:主题 A
205
- - references/topic-b.md:主题 B
206
-
207
- ### 校验
208
-
209
- - [ ] skill-vetter 通过
210
- - [ ] 引用了正确的 rules
211
- - [ ] 没有重复 rules 正文
212
-
213
- ### Reviewer
214
-
215
- @架构组
216
- ```
217
-
218
- ## 8. ❌ 反模式
219
-
220
- ### 8.1 ❌ SKILL.md 直接写铁律
221
-
222
- ```markdown
223
- ❌ 错:
224
- ## 数据访问边界
225
- 1. 不映射 PF_ 平台表
226
- 2. 不分页循环 Feign
227
- ...
228
-
229
- ✅ 正确:
230
- ## 前置约束
231
- - 必须遵守 `rules/meritdata-platform-data-boundary.md`
232
- ```
233
-
234
- ### 8.2 ❌ references 写"是什么"
235
-
236
- ```markdown
237
- ❌ 错:
238
- # 缓存是什么
239
- 缓存是一种...
240
-
241
- ✅ 正确:
242
- # 多级缓存配置指南
243
- ## 1. Caffeine L1 配置
244
- ...
245
- ```
246
-
247
- ### 8.3 ❌ SKILL.md 行数过长
248
-
249
- ```markdown
250
- ❌ 错:SKILL.md 100 行(详情都在)
251
-
252
- ✅ 正确:SKILL.md 38 行(路由),详情在 references/
253
- ```
254
-
255
- ## 9. 关联阅读
256
-
257
- - [templates/SKILL-template.md](templates/SKILL-template.md) — SKILL.md 模板
258
- - [templates/references-template.md](templates/references-template.md) — references 模板
259
- - [../skill-vetter/README.md](../skill-vetter/README.md) — 校验
260
- - [../skill-stocktake/README.md](../skill-stocktake/README.md) — 清单盘点
@@ -1,35 +0,0 @@
1
- ---
2
- name: meritdata-platform-<topic>
3
- description: <一句话描述,包含 3-5 个触发关键词>。当用户说"<kw1> / <kw2> / <kw3>"时使用。
4
- metadata:
5
- version: "1.0.0"
6
- risk: low
7
- layer: L3
8
- sub-layer: L3-C
9
- stack: java
10
- ---
11
-
12
- # meritdata-platform-<topic>
13
-
14
- ## 触发
15
-
16
- - 用户说"<kw1>"
17
- - 用户说"<kw2>"
18
- - <场景 3>
19
- - <场景 4>
20
-
21
- ## 不触发
22
-
23
- - <场景 A>(→ `meritdata-platform-<other-skill>`)
24
- - <场景 B>(→ `meritdata-platform-<other-skill>`)
25
-
26
- ## 前置约束
27
-
28
- - 必须遵守 [`rules/code-dev-rules.md`](../../rules/code-dev-rules.md)
29
- - 必须遵守 [`rules/naming-conventions-rules.md`](../../rules/naming-conventions-rules.md)
30
-
31
- ## 路由
32
-
33
- - [guide.md](references/guide.md) — 总览
34
- - [topic-a.md](references/topic-a.md) — 主题 A
35
- - [topic-b.md](references/topic-b.md) — 主题 B
@@ -1,59 +0,0 @@
1
- # <标题>
2
-
3
- > <一句话说明本文件主题>。
4
-
5
- ---
6
-
7
- ## 1. <章节 1>
8
-
9
- <内容>
10
-
11
- ### 1.1 <子章节>
12
-
13
- ```java
14
- // 代码示例
15
- ```
16
-
17
- ### 1.2 <子章节>
18
-
19
- <内容>
20
-
21
- ## 2. <章节 2>
22
-
23
- <内容>
24
-
25
- ```java
26
- // 代码示例
27
- ```
28
-
29
- ## 3. <章节 3>
30
-
31
- ### 3.1 <子章节>
32
-
33
- <内容>
34
-
35
- ---
36
-
37
- ## ❌ 反模式
38
-
39
- ### ❌ <反模式 1>
40
-
41
- ```java
42
- // ❌ 错
43
- ```
44
-
45
- ```java
46
- // ✅ 正确
47
- ```
48
-
49
- ### ❌ <反模式 2>
50
-
51
- <说明>
52
-
53
- ---
54
-
55
- ## 关联阅读
56
-
57
- - [guide.md](guide.md) — <一句话>
58
- - [SKILL.md](../SKILL.md)
59
- - [相关 rules](../../rules/<file>.md)
@@ -1,121 +0,0 @@
1
- # skill-stocktake
2
-
3
- > 生成 meritdata-platform-suite 中所有 skill 的清单报告。
4
-
5
- ---
6
-
7
- ## 用途
8
-
9
- - 套件盘点:了解当前 skill 全貌
10
- - 月度同步:统计 skill 数量 / 规模变化
11
- - 阶段验收:交付前的清单核查
12
- - 报告输出:JSON / Markdown 格式
13
-
14
- ## 报告内容
15
-
16
- - 总数 + references 总行数
17
- - Layer / Sub-Layer / Stack 分布
18
- - 每个 skill 的:name / layer / sub-layer / stack / version / risk / SKILL.md 行数 / references 数量 / references 行数
19
-
20
- ## 用法
21
-
22
- ```bash
23
- # 控制台输出
24
- bash tools/skill-stocktake/run.sh
25
-
26
- # JSON 格式
27
- bash tools/skill-stocktake/run.sh json stocktake.json
28
-
29
- # Markdown 格式
30
- bash tools/skill-stocktake/run.sh markdown stocktake.md
31
- ```
32
-
33
- ## 输出示例(console)
34
-
35
- ```
36
- ========================================
37
- skill-stocktake: skill 清单盘点
38
- ========================================
39
- 生成时间: 2026-09-07 18:30:00
40
- 总数: 35 个 skill
41
- References 总行数: 12450
42
-
43
- Layer 分布:
44
- L1 1
45
- L2 13
46
- L3 15
47
- L4 3
48
- L5 3
49
-
50
- Sub-Layer 分布:
51
- L2-C 6
52
- L2-F 1
53
- L2-M 6
54
- L3-C 13
55
- L3-F 2
56
- L4-T 3
57
-
58
- Skill 列表:
59
- Name Layer Sub Stack Ver
60
- ---------------------------------------------------------------------------------
61
- meritdata-platform-backend-deploy L3 L3-C java 1.0.0
62
- meritdata-platform-bpm L2 L2-C java 1.0.0
63
- meritdata-platform-cache L3 L3-C java 1.0.0
64
- ...
65
- ```
66
-
67
- ## 输出示例(JSON)
68
-
69
- ```json
70
- {
71
- "scanTime": "2026-09-07 18:30:00",
72
- "totalSkills": 35,
73
- "totalRefLines": 12450,
74
- "layers": {
75
- "L1": 1,
76
- "L2": 13,
77
- "L3": 15,
78
- "L4": 3
79
- },
80
- "subLayers": {
81
- "L2-M": 6,
82
- "L2-C": 6,
83
- "L2-F": 1,
84
- "L3-C": 13,
85
- "L3-F": 2,
86
- "L4-T": 3
87
- },
88
- "skills": [
89
- {
90
- "name": "meritdata-platform-cache",
91
- "layer": "L3",
92
- "subLayer": "L3-C",
93
- "stack": "java",
94
- "version": "1.0.0",
95
- "risk": "medium",
96
- "skillLines": 38,
97
- "refCount": 3,
98
- "refLines": 720,
99
- "description": "多级缓存(Caffeine + Redis + DB)"
100
- }
101
- ]
102
- }
103
- ```
104
-
105
- ## 集成 CI
106
-
107
- ```yaml
108
- # GitLab CI
109
- stocktake:
110
- stage: report
111
- script:
112
- - bash tools/skill-stocktake/run.sh markdown stocktake.md
113
- artifacts:
114
- paths:
115
- - stocktake.md
116
- ```
117
-
118
- ## 关联阅读
119
-
120
- - [../skill-vetter/README.md](../skill-vetter/README.md) — 校验工具
121
- - [../skill-authoring-workflow/README.md](../skill-authoring-workflow/README.md) — 编写规范
@@ -1,153 +0,0 @@
1
- #!/bin/bash
2
- # skill-stocktake: 生成 meritdata-platform-suite 中所有 skill 的清单报告
3
- #
4
- # 用法: bash tools/skill-stocktake/run.sh [output-format] [output-file]
5
- # output-format: console | json | markdown (默认 console)
6
- # output-file: 输出文件路径(默认 stdout)
7
-
8
- set -e
9
-
10
- SUITE_DIR="${SUITE_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
11
- SKILLS_DIR="$SUITE_DIR/skills"
12
- FORMAT="${1:-console}"
13
- OUTPUT="${2:-}"
14
-
15
- NOW=$(date '+%Y-%m-%d %H:%M:%S')
16
-
17
- # 收集数据
18
- skills_data=()
19
- while IFS= read -r skill_dir; do
20
- skill_name=$(basename "$skill_dir")
21
- skill_md="$skill_dir/SKILL.md"
22
-
23
- if [ ! -f "$skill_md" ]; then
24
- continue
25
- fi
26
-
27
- layer=$(grep -E '^[[:space:]]+layer:' "$skill_md" | head -1 | sed 's/.*layer:[[:space:]]*//')
28
- sub_layer=$(grep -E '^[[:space:]]+sub-layer:' "$skill_md" | head -1 | sed 's/.*sub-layer:[[:space:]]*//')
29
- [ -z "$sub_layer" ] && sub_layer="(无)"
30
- stack=$(grep -E '^[[:space:]]+stack:' "$skill_md" | head -1 | sed 's/.*stack:[[:space:]]*//')
31
- [ -z "$stack" ] && stack="(无)"
32
- version=$(grep -E '^[[:space:]]+version:' "$skill_md" | head -1 | sed "s/.*version:[[:space:]]*[\"']//;s/[\"']//")
33
- risk=$(grep -E '^[[:space:]]+risk:' "$skill_md" | head -1 | sed 's/.*risk:[[:space:]]*//')
34
- desc=$(grep -E '^description:' "$skill_md" | head -1 | sed 's/description:\s*//')
35
- skill_lines=$(wc -l < "$skill_md")
36
- ref_count=$(find "$skill_dir/references" -type f -name '*.md' 2>/dev/null | wc -l)
37
- ref_lines=$(find "$skill_dir/references" -type f -name '*.md' 2>/dev/null -exec wc -l {} + 2>/dev/null | tail -1 | awk '{print $1}')
38
- ref_lines=${ref_lines:-0}
39
-
40
- skills_data+=("$skill_name|$layer|$sub_layer|$stack|$version|$risk|$skill_lines|$ref_count|$ref_lines|$desc")
41
- done < <(find "$SKILLS_DIR" -mindepth 1 -maxdepth 1 -type d | sort)
42
-
43
- total_count=${#skills_data[@]}
44
- total_ref_lines=0
45
- for line in "${skills_data[@]}"; do
46
- total_ref_lines=$((total_ref_lines + $(echo "$line" | cut -d'|' -f9)))
47
- done
48
-
49
- # 按 layer / sub-layer 统计
50
- declare -A layer_count
51
- declare -A sub_layer_count
52
- declare -A stack_count
53
- for line in "${skills_data[@]}"; do
54
- IFS='|' read -r _ l sl s _ _ _ _ _ _ <<< "$line"
55
- layer_count[$l]=$((${layer_count[$l]:-0} + 1))
56
- [ -n "$sl" ] && sub_layer_count[$sl]=$((${sub_layer_count[$sl]:-0} + 1))
57
- [ -n "$s" ] && stack_count[$s]=$((${stack_count[$s]:-0} + 1))
58
- done
59
-
60
- # 输出
61
- output_text=""
62
- case "$FORMAT" in
63
- json)
64
- output_text+="{\n"
65
- output_text+=" \"scanTime\": \"$NOW\",\n"
66
- output_text+=" \"totalSkills\": $total_count,\n"
67
- output_text+=" \"totalRefLines\": $total_ref_lines,\n"
68
- output_text+=" \"layers\": {\n"
69
- first=true
70
- for key in "${!layer_count[@]}"; do
71
- if [ "$first" = true ]; then first=false; else output_text+=",\n"; fi
72
- output_text+=" \"$key\": ${layer_count[$key]}"
73
- done
74
- output_text+="\n },\n"
75
- output_text+=" \"subLayers\": {\n"
76
- first=true
77
- for key in "${!sub_layer_count[@]}"; do
78
- if [ "$first" = true ]; then first=false; else output_text+=",\n"; fi
79
- output_text+=" \"$key\": ${sub_layer_count[$key]}"
80
- done
81
- output_text+="\n },\n"
82
- output_text+=" \"skills\": [\n"
83
- first=true
84
- for line in "${skills_data[@]}"; do
85
- IFS='|' read -r name l sl s v r sl_l rc rl d <<< "$line"
86
- if [ "$first" = true ]; then first=false; else output_text+=",\n"; fi
87
- d_escaped=$(echo "$d" | sed 's/"/\\"/g')
88
- output_text+=" {\"name\":\"$name\",\"layer\":\"$l\",\"subLayer\":\"$sl\",\"stack\":\"$s\",\"version\":\"$v\",\"risk\":\"$r\",\"skillLines\":$sl_l,\"refCount\":$rc,\"refLines\":$rl,\"description\":\"$d_escaped\"}"
89
- done
90
- output_text+="\n ]\n"
91
- output_text+="}\n"
92
- ;;
93
-
94
- markdown)
95
- output_text+="# Skill 清单盘点\n\n"
96
- output_text+="**生成时间**:$NOW\n\n"
97
- output_text+="**总数**:$total_count 个 skill\n\n"
98
- output_text+="**总 references 行数**:$total_ref_lines\n\n"
99
- output_text+="## Layer 分布\n\n"
100
- output_text+="| Layer | 数量 |\n|-------|------|\n"
101
- for key in $(echo "${!layer_count[@]}" | tr ' ' '\n' | sort); do
102
- output_text+="| $key | ${layer_count[$key]} |\n"
103
- done
104
- output_text+="\n## Sub-Layer 分布\n\n"
105
- output_text+="| Sub-Layer | 数量 |\n|-----------|------|\n"
106
- for key in $(echo "${!sub_layer_count[@]}" | tr ' ' '\n' | sort); do
107
- output_text+="| $key | ${sub_layer_count[$key]} |\n"
108
- done
109
- output_text+="\n## Skill 列表\n\n"
110
- output_text+="| Name | Layer | Sub-Layer | Stack | Ver | Risk | SKILL 行 | Refs | Ref 行 |\n"
111
- output_text+="|------|-------|-----------|-------|-----|------|----------|------|--------|\n"
112
- for line in "${skills_data[@]}"; do
113
- IFS='|' read -r name l sl s v r sl_l rc rl _ <<< "$line"
114
- output_text+="| $name | $l | $sl | $s | $v | $r | $sl_l | $rc | $rl |\n"
115
- done
116
- ;;
117
-
118
- *)
119
- # console
120
- echo "========================================"
121
- echo " skill-stocktake: skill 清单盘点"
122
- echo "========================================"
123
- echo "生成时间: $NOW"
124
- echo "总数: $total_count 个 skill"
125
- echo "References 总行数: $total_ref_lines"
126
- echo ""
127
- echo "Layer 分布:"
128
- for key in $(echo "${!layer_count[@]}" | tr ' ' '\n' | sort); do
129
- printf " %-8s %d\n" "$key" "${layer_count[$key]}"
130
- done
131
- echo ""
132
- echo "Sub-Layer 分布:"
133
- for key in $(echo "${!sub_layer_count[@]}" | tr ' ' '\n' | sort); do
134
- printf " %-8s %d\n" "$key" "${sub_layer_count[$key]}"
135
- done
136
- echo ""
137
- echo "Skill 列表:"
138
- printf " %-45s %-5s %-7s %-12s %s\n" "Name" "Layer" "Sub" "Stack" "Ver"
139
- echo " ---------------------------------------------------------------------------------"
140
- for line in "${skills_data[@]}"; do
141
- IFS='|' read -r name l sl s v _ _ _ _ _ <<< "$line"
142
- printf " %-45s %-5s %-7s %-12s %s\n" "$name" "$l" "$sl" "$s" "$v"
143
- done
144
- echo ""
145
- ;;
146
- esac
147
-
148
- if [ -n "$OUTPUT" ]; then
149
- echo -e "$output_text" > "$OUTPUT"
150
- echo "已写入: $OUTPUT"
151
- else
152
- echo -e "$output_text"
153
- fi