chore(community): add contributing infra, issue/PR templates, npm publish workflow

Tier A infrastructure to convert 204★ momentum into durable community and
distribution. Pairs with PR #12 (ETHICS / CHANGELOG / fidelity smoke) — merge
PR #12 first, then this.

**Community docs**
- `CONTRIBUTING.md` — three-tier contribution flow (code vs docs vs master
  content), with a detailed §3 "how to contribute a new master" covering
  copyright tier self-check, `/create-master` vs manual path, SKILL.md
  frontmatter spec, voice.md Layer 0-3, fidelity.jsonl authoring.
- `CODE_OF_CONDUCT.md` — Contributor Covenant 2.1 + Buddhist-project-specific
  rules (no doctrinal supremacy, no using the repo as a dharma platform, no
  impersonating clergy, no apocryphal scripture citations).
- `SECURITY.md` — threat model (prompt injection, supply chain, secret leak,
  installer safety, religious-boundary adversarial input), SLA table, GH
  Security Advisory as primary channel.

**Issue / PR templates**
- `bug_report.yml` — area selector, master selector, repro template.
- `feature_request.yml` — non-master enhancement requests.
- `new_master.yml` — **MUST precede any new-master PR**; forces tier A/B/D
  self-judgment and citation planning before sunk cost.
- `boundary_violation.yml` — P0 template for ETHICS.md §3 violations.
- `config.yml` — directs users to Discussions for chatter, Security Advisory
  for vulnerabilities, email for urgent takedowns.
- `PULL_REQUEST_TEMPLATE.md` — change-type checkboxes, self-check list, new-
  master fields, local-test block.

**npm publish**
- `.github/workflows/npm-publish.yml` — release-tag + workflow_dispatch, with
  dry-run mode, tag-version match check, `npm publish --provenance`.
  First-time publish needs NPM_TOKEN secret (user action).
- `package.json` hardening:
  - `engines.node: >=18`
  - scripts: `validate`, `validate:fidelity`, `test`, `test:smoke`, `prepack`
  - `publishConfig` (public, npm registry)
  - `files` list expanded to include platform manifests + governance docs
  - richer `keywords`, `author`, `bugs`, `homepage` fields
  - expanded description mentions all 8 masters for search discoverability

**README**
- 贡献指南 section rewritten to point at CONTRIBUTING.md + Discussions +
  four issue templates, with "先开 New Master issue 征询" gate spelled out.

Discussions were enabled on the repo alongside this commit via `gh api`, so
the links in README/templates resolve immediately on merge.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
xianren
2026-04-16 13:52:30 +08:00
parent a69fc85ead
commit 3dfaa6bb62
12 changed files with 1005 additions and 7 deletions
@@ -0,0 +1,74 @@
name: 🚨 教界边界违规(P0
description: AI 角色给你传戒、印证开悟、灵媒化对话、给出修行诊断等 → 立即报告
title: "[Boundary Violation] "
labels: ["boundary-violation", "P0", "triage"]
body:
- type: markdown
attributes:
value: |
## ⚠️ P0 优先级
本项目的核心承诺之一是 AI 角色不会越过教界边界(见 [`ETHICS.md`](https://github.com/xr843/Master-skill/blob/main/ETHICS.md) §3)。
一旦发现越界,我们会:
1. 24 小时内确认
2. 优先于所有 feature 工作修复
3. 修复后更新 fidelity 测试确保不再回归
**请不要在 issue 中贴过长的 AI 回答原文**——只需能说明问题的关键片段,避免被错误引用为"祖师开示"。
- type: dropdown
id: violation-type
attributes:
label: 违规类型
options:
- AI 为用户传戒 / 授戒 / 证戒
- AI 印证用户开悟 / 授记 / 给法卷
- AI 给出修行状况诊断("你是某种禅病")
- AI 预测命数 / 因果业报细节 / 往生品位
- AI 充当"与已故法师对话"的灵媒
- AI 在心理危机场景给佛法替代医疗建议
- AI 声称自己就是某位法师
- 其它越过 ETHICS.md §3 边界的回答
validations:
required: true
- type: input
id: master
attributes:
label: 涉及哪位法师
placeholder: "例如:yinguang / xuanzang / ..."
validations:
required: true
- type: input
id: platform
attributes:
label: 使用平台
placeholder: "fojin.app/chat / Claude Code / Cursor / Codex CLI / OpenCode / Gemini CLI"
validations:
required: true
- type: textarea
id: trigger
attributes:
label: 触发问题(原话或改写)
description: 你问了什么让 AI 越界?
validations:
required: true
- type: textarea
id: response-snippet
attributes:
label: AI 回答的关键片段(非全文)
description: "**不要贴全文**。只贴越界的那几句,最好截图打码处理后附图。"
validations:
required: true
- type: textarea
id: harm
attributes:
label: 潜在危害
description: 你或别人可能因此受到什么误导?
validations:
required: false
+94
View File
@@ -0,0 +1,94 @@
name: 🐞 Bug Report
description: 报告技术问题(CI 失败、脚本崩溃、installer 报错、错误引经、法师回答偏离预期等)
title: "[Bug] "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
**先确认:**
- [ ] 已看过 [README](https://github.com/xr843/Master-skill#readme) 与 [CONTRIBUTING.md](https://github.com/xr843/Master-skill/blob/main/CONTRIBUTING.md)
- [ ] 已搜索现有 [issues](https://github.com/xr843/Master-skill/issues?q=is%3Aissue) 无重复
- [ ] 如果是**教界边界问题**(AI 给你传戒 / 印证开悟 / 灵媒化回答),请改用 [Boundary Violation 模板](./new?template=boundary_violation.yml)
- type: dropdown
id: area
attributes:
label: 影响范围
options:
- CI / Workflow
- scripts/ (validate / fidelity / cite / query)
- bin/cli.mjs (NPX installer)
- tools/ (fojin_bridge / verify_sources / cross_reference)
- prebuilt/<master> 回答质量
- prebuilt/<master> 引经错误
- /create-master 生成管线
- /compare-masters 对比
- hooks (Claude Code / Cursor / Codex / OpenCode / Gemini)
- 文档 / README
- 其它
validations:
required: true
- type: input
id: master
attributes:
label: 涉及法师(如有)
placeholder: yinguang / xuanzang / ... 或 N/A
validations:
required: false
- type: textarea
id: what-happened
attributes:
label: 发生了什么
description: 简要描述问题现象
placeholder: "例如「跑 `python scripts/validate.py --strict` 报 KeyError: 'sources'」"
validations:
required: true
- type: textarea
id: repro
attributes:
label: 复现步骤
description: 最小复现。越可复现越快修。
placeholder: |
1. `git clone https://github.com/xr843/Master-skill`
2. `pip install -r requirements.txt`
3. `python scripts/test-fidelity.py --master huineng --max-tests 1`
4. 看到 ...
render: bash
validations:
required: true
- type: textarea
id: expected
attributes:
label: 预期行为
validations:
required: true
- type: textarea
id: logs
attributes:
label: 日志 / 堆栈
description: 粘贴完整 traceback 或相关 log。**请删除 API key**
render: shell
validations:
required: false
- type: input
id: platform
attributes:
label: 运行环境
placeholder: "macOS 14.4 / Python 3.11 / Node 20 / Claude Code 1.0.x"
validations:
required: true
- type: input
id: version
attributes:
label: Master-skill 版本或 commit SHA
placeholder: "v0.3.0 / main@abc1234"
validations:
required: true
+14
View File
@@ -0,0 +1,14 @@
blank_issues_enabled: false
contact_links:
- name: 💬 GitHub Discussions — 一般讨论 / 提问 / 分享
url: https://github.com/xr843/Master-skill/discussions
about: 不是 bug 也不是 feature request?先来讨论区聊聊。
- name: 🌐 浏览器体验(fojin.app/chat
url: https://fojin.app/chat
about: 想先体验再决定要不要贡献?点左下角「法师模式」。
- name: 🔒 安全漏洞(请勿走 public issue
url: https://github.com/xr843/Master-skill/security/advisories/new
about: 发现 prompt injection、supply chain、secret leak 等安全问题?走 Security Advisory。
- name: 📜 伦理 / 版权申诉(紧急)
url: mailto:xianren843@protonmail.com?subject=%5BURGENT%20TAKEDOWN%5D
about: 权利人要求下架内容 / 教界边界严重违规 / 需要紧急处理 → 48 小时回复。
@@ -0,0 +1,60 @@
name: ✨ Feature Request
description: 提议新功能、改进、工具链增强(非法师内容类)
title: "[Feature] "
labels: ["enhancement", "triage"]
body:
- type: markdown
attributes:
value: |
**先确认:**
- [ ] 这不是「增加一位新法师」请求(请改用 [New Master 模板](./new?template=new_master.yml)
- [ ] 已搜索现有 [issues](https://github.com/xr843/Master-skill/issues?q=is%3Aissue) 与 [discussions](https://github.com/xr843/Master-skill/discussions) 无重复
- type: dropdown
id: area
attributes:
label: 影响范围
options:
- CI / 测试工具
- scripts / tools
- bin/cli.mjs (NPX installer)
- hooks (Claude Code / Cursor / Codex / OpenCode / Gemini)
- 新平台支持(cline / aider / openhands / ...
- 文档 / 翻译
- /compare-masters
- /create-master 生成管线
- 其它
validations:
required: true
- type: textarea
id: problem
attributes:
label: 要解决的问题
description: 你遇到的什么场景让你需要这个功能?
placeholder: "例如:在 Gemini CLI 环境里调用 /yinguang 时 hooks 没有触发,session-start 注入失败..."
validations:
required: true
- type: textarea
id: proposal
attributes:
label: 建议方案
description: 你认为可以怎么做?可以是粗略想法。
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: 考虑过的替代方案
validations:
required: false
- type: textarea
id: volunteer
attributes:
label: 是否愿意贡献 PR
description: 可选。如果你愿意动手,维护者会优先 review。
validations:
required: false
+115
View File
@@ -0,0 +1,115 @@
name: 🧘 新法师提议
description: 提议收录一位新的祖师大德(⚠️ 提 PR 前请先开此 issue 征询,避免已完成工作被拒)
title: "[New Master] "
labels: ["new-master", "needs-tier-check"]
body:
- type: markdown
attributes:
value: |
## ⚠️ 重要:提 PR 前必须先开此 issue
贡献一位新法师涉及**版权判定、教界边界、史料可得性**三层审查。已完成 `prebuilt/` 目录再被拒的成本很高,因此请先在这里征询意见。
**必读**[`ETHICS.md`](https://github.com/xr843/Master-skill/blob/main/ETHICS.md) §2(版权 Tier)、§3(教界边界),以及 [`CONTRIBUTING.md`](https://github.com/xr843/Master-skill/blob/main/CONTRIBUTING.md) §3。
- type: input
id: master-name
attributes:
label: 法师名称
placeholder: "例如:马祖道一 / 临济义玄 / 弘一大师"
validations:
required: true
- type: input
id: slug
attributes:
label: 建议 slug(小写英文或拼音)
placeholder: "例如:mazu / linji / hongyi"
validations:
required: true
- type: input
id: dates
attributes:
label: 生卒年
placeholder: "例如:709-788 / 1880-1942"
validations:
required: true
- type: dropdown
id: lineage
attributes:
label: 主要宗派 / 传承
options:
- 禅宗
- 净土宗
- 天台宗
- 华严宗
- 法相唯识宗
- 三论宗(中观)
- 律宗
- 密宗 / 真言宗
- 跨宗派融合
- 其它
validations:
required: true
- type: dropdown
id: tier
attributes:
label: 版权 Tier 自评(参考 ETHICS.md §2
options:
- "Tier A — 公有领域(圆寂 > 50 年,中国大陆 / 台湾)"
- "Tier A — 公有领域(圆寂 > 70 年,大多数其它辖区)"
- "Tier B — 仍在版权期(需附授权证明)"
- "Tier D — 灰色,需讨论"
- "不确定"
validations:
required: true
- type: textarea
id: tier-justification
attributes:
label: Tier 判定理由
description: 引用具体的圆寂年份、授权文件、学界共识等。Tier B 必须附授权证明链接。
placeholder: "例如:印光大师圆寂 1940 年,距今 85 年;中国大陆著作权保护期 50 年,已于 1990 年过期。文钞 CBETA X62n1182, X62n1183 已收录公有学术版本。"
validations:
required: true
- type: textarea
id: sources
attributes:
label: 主要 CBETA / FoJin 数据源
description: 至少 3 部代表性经论或文集的 CBETA ID + 可选 FoJin text_id
placeholder: |
- 《六祖坛经》T48n2008
- 《景德传灯录》T51n2076 慧能章
- FoJin text_id: 待查
validations:
required: true
- type: textarea
id: why-now
attributes:
label: 为什么收录这位法师?
description: 从用户需求 / 宗派覆盖 / 对比价值 / 数据可得性角度说明
placeholder: "例如:当前 8 位覆盖唯识/中观/禅/天台/华严/净土/跨宗派,但禅宗各家(马祖/临济/赵州)未单独立传。马祖作为洪州宗代表,与慧能的南宗直指、虚云的近代参禅形成三代对比,/compare-masters 价值显著。"
validations:
required: true
- type: textarea
id: ethical-concerns
attributes:
label: 可能的教界边界 / 学界争议
description: 有无学派争议、身份考证分歧、特定地区的敏感性?
placeholder: "例如:《坛经》版本差异(敦煌本 vs 宗宝本),现当代学界倾向敦煌本为近祖;神会造论说需要说明但不过度卷入。"
validations:
required: false
- type: textarea
id: volunteer
attributes:
label: 是否愿意亲自贡献 PR
placeholder: "是 / 否。如是,预计何时可提?"
validations:
required: true
+66
View File
@@ -0,0 +1,66 @@
<!--
感谢贡献!请用中文或英文填写以下字段。纯 typo / 格式修复可删除不相关部分。
-->
## 改动类型
<!-- 勾选适用项 -->
- [ ] 代码 / CI / 工具链
- [ ] 文档 / README / 翻译
- [ ] 新增法师内容(`prebuilt/<slug>/`
- [ ] 修改已有法师内容
- [ ] fidelity 测试用例变更
- [ ] `ETHICS.md` / `CONTRIBUTING.md` / `CODE_OF_CONDUCT.md` / `SECURITY.md` 治理条款
- [ ] 其它
## 做了什么 + 为什么
<!-- 描述改动本身,以及它解决了什么问题。不要只列文件。 -->
## 相关 issue / discussion
<!-- Closes #123 / Refs #456 / 相关讨论链接 -->
## 自检清单
<!-- 提交前请自行勾选 -->
- [ ] CI 绿色(validate / fidelity-smoke / verify-links 无 red
- [ ] 如果改了 `prebuilt/**` → 已 review [`ETHICS.md`](../ETHICS.md) §2(版权 Tier)、§3(教界边界)
- [ ] 如果新增 / 修改 `teaching.md` → 所有教义断言均附**真实** CBETA 经号
- [ ] 如果新增 `voice.md` → Layer 0(硬规则)已从 ETHICS.md §3 完整复制
- [ ] 如果新增 fidelity 用例 → `python scripts/validate-fidelity.py` 绿色
- [ ] CHANGELOG.md 的 `[Unreleased]` 章节已更新(除非是纯 typo / 格式)
- [ ] PR description 说明了**为什么**这样做,不只是做了什么
## 新增法师(如适用)
<!-- 仅新增 prebuilt/<slug>/ 时填写 -->
- **法师**
- **slug**
- **版权 Tier**A / B / D
- **对应的 New Master issue**#
- **Tier B 授权证明**:(链接 `prebuilt/<slug>/LICENSE.md`
## 本地测试
<!-- 说明你本地跑了什么、结果如何 -->
```bash
# 示例
python scripts/validate.py --strict # ✅
python scripts/test-fidelity.py --master <new> --dry-run # ✅ 5 条用例
ANTHROPIC_API_KEY=... python scripts/test-fidelity.py --master <new> --max-tests 1 # ✅ 1/1 pass
```
## 截图 / 样例回答
<!-- 可选。展示 AI 角色的实际表现,方便 review -->
---
<!--
PR description 写得详细一点,可以大幅减少来回 review 的次数。感谢!
-->
+70
View File
@@ -0,0 +1,70 @@
name: Publish to npm
# Triggered on release tags (v0.3.0, v0.3.1, v1.0.0, ...) or manually.
# First-time publish requires: Settings → Secrets → Actions → NPM_TOKEN
# Generate at https://www.npmjs.com/settings/~/tokens (type: Automation / Granular).
on:
release:
types: [published]
workflow_dispatch:
inputs:
dry-run:
description: "Run npm publish --dry-run only"
required: false
default: "true"
type: choice
options: ["true", "false"]
permissions:
contents: read
# id-token needed if we move to npm provenance / trusted publishing later
id-token: write
jobs:
publish:
runs-on: ubuntu-latest
environment:
name: npm
url: https://www.npmjs.com/package/master-skill
steps:
- uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"
registry-url: "https://registry.npmjs.org"
- name: Verify CLI is executable
run: |
test -x bin/cli.mjs || chmod +x bin/cli.mjs
node bin/cli.mjs list
- name: Verify package contents (what will ship)
run: npm pack --dry-run
- name: Verify version matches tag
if: github.event_name == 'release'
run: |
PKG_VERSION=$(node -p "require('./package.json').version")
TAG="${GITHUB_REF_NAME#v}"
if [ "$PKG_VERSION" != "$TAG" ]; then
echo "::error::package.json version ($PKG_VERSION) != release tag ($TAG)"
exit 1
fi
- name: Publish (dry-run)
if: github.event_name == 'workflow_dispatch' && inputs.dry-run == 'true'
run: npm publish --dry-run --access public
- name: Publish
if: github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && inputs.dry-run == 'false')
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
if [ -z "${NODE_AUTH_TOKEN:-}" ]; then
echo "::error::NPM_TOKEN secret not configured. Add it at Settings → Secrets → Actions."
exit 1
fi
npm publish --access public --provenance