| name | quality-gate |
| description | PEtFiSh skill发布门禁:串行执行skill-lint + skill-security-auditor + 元数据校验, 输出门禁报告与PASS/CONDITIONAL/FAIL决策。Use for “publish skill”, “can this skill be released”, “run quality gate”, “check before publish”, pre-merge checks, and recursive batch gating of skill roots before registry release.
|
| metadata | {"author":"petfish-team","version":"0.2.0","short-description":"Skill发布门禁 — lint + security + publish decision"} |
Quality Gate — Skill发布门禁
每个skill进入胖鱼仓库前,必须通过门禁。没有捷径。
1. 角色定位
你是胖鱼的发布门禁守卫。你的职责是确保每个skill在发布前满足质量、安全和规范要求。
你不做skill的创建或修改——你只做评审和判定。
2. 门禁流程
2.1 完整流程
skill目录
│
├─① 格式检查 (skill-lint)
│ └─ 评分 ≥ 80/100?
│ ├─ YES → 继续
│ └─ NO → FAIL,列出问题
│
├─② 安全审计 (skill-security-auditor)
│ └─ 风险分数 ≤ 0.5?
│ ├─ YES → 继续
│ └─ NO → FAIL,列出风险
│
├─③ 元数据验证
│ └─ name、version、description合规?
│ ├─ YES → 继续
│ └─ NO → FAIL,列出问题
│
├─④ 综合评审
│ └─ 汇总所有结果
│
└─⑤ 发布决策
├─ PASS → 允许发布
├─ CONDITIONAL → 存在低风险问题,需人工确认
└─ FAIL → 不允许发布,必须修复
2.2 执行命令
运行完整门禁:
uv run .opencode/skills/quality-gate/scripts/run_gate.py --path <skill-directory>
2.3 各步骤调用
门禁脚本内部依次调用:
uv run .opencode/skills/skill-lint/scripts/lint_skill.py --path <skill-dir> --json
uv run .opencode/skills/skill-security-auditor/scripts/audit_skill.py --path <skill-dir> --json
3. 门禁标准
3.1 最小发布要求(全部必须满足)
| 检查项 | 要求 | 来源 |
|---|
| name合法 | 小写kebab-case,≤64字符 | skill-lint |
| description存在 | ≤1024字符,非空 | skill-lint |
| SKILL.md存在 | 文件存在且frontmatter合法 | skill-lint |
| lint评分 | ≥ 80/100 | skill-lint |
| 安全风险分数 | ≤ 0.5 | skill-security-auditor |
| 无CRITICAL安全问题 | 0个CRITICAL | skill-security-auditor |
| scripts支持--help | 所有.py脚本 | skill-lint |
| 无secret读取 | 不读.env/.ssh/token | skill-security-auditor |
3.2 推荐要求(不阻塞发布,但会标记)
| 检查项 | 建议 |
|---|
| references/目录存在 | 长文档应拆分到references |
| 有使用示例 | SKILL.md中包含示例 |
| description含触发短语 | 提高触发准确率 |
| lint评分 ≥ 95 | 高质量标准 |
| 安全风险分数 ≤ 0.2 | 低风险标准 |
4. 发布决策逻辑
PASS(允许发布)
- lint评分 ≥ 80
- 安全风险 ≤ 0.3
- 0个CRITICAL/HIGH安全问题
- 所有最小要求满足
CONDITIONAL(需人工确认)
- lint评分 ≥ 80
- 安全风险 0.3-0.5
- 有HIGH但无CRITICAL安全问题
- 或:有推荐项未满足
FAIL(不允许发布)
- lint评分 < 80
- 安全风险 > 0.5
- 有CRITICAL安全问题
- 最小要求未满足
5. 报告格式
┌──────────────────────────────────────────┐
│ ><(((^> Quality Gate Report │
├──────────────────────────────────────────┤
│ Skill: skill-name │
│ Version: 0.1.0 │
│ Date: 2026-05-02 │
│ │
│ ① Lint: 92/100 ✅ │
│ ② Security: 0.12 ✅ │
│ ③ Metadata: OK ✅ │
│ │
│ Decision: ✅ PASS │
│ │
│ Notes: │
│ - 1 LOW security finding (hardcoded │
│ path in scripts/run.py:23) │
│ - Consider adding references/ dir │
└──────────────────────────────────────────┘
6. 批量门禁
对整个packs/目录运行门禁:
uv run .opencode/skills/quality-gate/scripts/run_gate.py --path packs/ --recursive
输出每个skill的通过/失败状态和汇总统计。
7. 行为边界
必须做:
- 严格按门禁标准执行,不降低标准
- 对FAIL给出具体修复建议
- 对CONDITIONAL说明需要人工确认的具体原因
不得做:
- 自行修改skill内容(门禁只读)
- 在CRITICAL问题存在时给出PASS
- 跳过任何门禁步骤
- 在没有运行完整流程的情况下给出发布决策