本项目欢迎人类与 AI 代理共同贡献。AI 代理请先读根目录
AGENTS.md。
- 工具链:见
rust-toolchain.toml(rustup会自动切换)。 - 命令:
make help查看全部;提交前必须make verify全绿。 - 开发依赖:
make bootstrap安装cargo-deny等。 - 内环快检:
make fast(fmt-check + clippy + test);一次性make hooks安装pre-push自动跑make verify(临时跳过:git push --no-verify)。 - 工作流与 CI 分层(单人/团队)详见
docs/开发工作流.md。 - 注意:
.claude/skills是指向.agents/skills的软链,在 Windows 检出会失效(当前 macOS 开发不受影响)。
-
项目许可:GPL-3.0-or-later(见
LICENSE)。 -
提交即表示同意以该许可发布你的贡献。
-
使用 DCO(Developer Certificate of Origin):每个提交加
Signed-off-by:git commit -s -m "feat(table): add wubi short-code support"即表示你确认有权提交该代码且同意其许可。CI 会用
.github/workflows/dco.yml校验每个普通提交的Signed-off-by(合并提交豁免);未签名会显示红叉(当前不阻断,团队化后设为必需)。 -
名称与 Logo 保留权利:fork 版本请改名,不要使用"萤火虫"名称与 Logo。
<type>(<scope>): <subject>
<body>
Signed-off-by: Your Name <you@example.com>
type:feat/fix/docs/refactor/test/chore/perf/build/ciscope:crate 名或模块(如table、config、ffi、docs)- 主题用英文,祈使句、小写、无句号。
- 一次提交只做一件事。
- 固定
dev为唯一活动迭代分支,不按任务创建feature/fix/docs分支;main受保护,必要合入统一走dev → main,合并后同步并继续复用dev(ADR-248)。 - 长期复用dev使用merge commit,不用squash/rebase合并;合并后dev快进origin/main并普通推送,不删除dev或强推同步(ADR-250)。任务与反馈闭环见开发工作流§1.2。
- PR 必须填写
.github/PULL_REQUEST_TEMPLATE.md,包含:改了什么、为什么、如何验证、是否触及铁律。 - CI 必须全绿才能合并;检查必须对应当前head,创建者负责跟进到合并或明确关闭。
- 一项完整改动的实现、测试、文档与证据在同一PR收拢,不为每次试验/交接另开PR;默认一次推进一个待合并PR,暂缓项记录恢复点后关闭。具体执行以开发工作流§1.1为准。
- 涉及架构/协议/许可 → 先提交 ADR(
docs/决策记录.md)。
| 项 | 要求 |
|---|---|
| 格式 | cargo fmt(默认配置) |
| Lint | cargo clippy --all-targets -- -D warnings |
| 内存安全 | 核心 crate #![forbid(unsafe_code)];unsafe 仅限 ime-ffi |
| 错误处理 | 库代码禁止 unwrap()/expect()(测试与 ime-cli 除外) |
| 测试 | 新逻辑需有单测;解析器改动需补 fuzz 目标 |
| 依赖 | 新增依赖须过 cargo deny check 并说明理由 |
| 注释 | 代码注释用英文;面向用户的文案用中文 |
- 设计/决策文档在
docs/,用中文。 - 行为变更必须同步更新文档;文档与代码不一致视为 bug。
- 新增数据必须先登记
docs/数据来源与许可.md和data/sources.toml。
- 提交前确认未引入网络/遥测代码(
make verify-no-network)。 - 安全问题请走
SECURITY.md(后续补充),不要公开 issue 披露细节。
- 范围明确、可独立验证;提交保持单一目的,同一改动的代码/测试/文档一起收尾,不为追求“小”把PR拆碎或堆积。
- 删代码优于加代码(见
AGENTS.md§11)。 - 拒绝“顺手重构”与范围外改动。
第三方 Actions 必须固定到审定过的 commit SHA(附可读版本注释),禁止 @vN / @master 等浮动引用——否则上游被篡改会影响我们的构建链:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4升级步骤(单独一个 ci: bump ... 提交,说明里附来源):
- 在官方仓库查该 tag/branch 当前指向的 commit:
gh api repos/<owner>/<repo>/commits/<tag-or-branch> --jq .sha
- 核验来源(官方 org / release notes),替换 SHA,更新
# 版本注释; - 每个 workflow 顶层声明最小权限(默认
contents: read); - 升级后至少等一次 CI 全绿再合并。
依赖审计是提交门槛:make verify 在缺少 cargo-deny 时会直接失败(用 make bootstrap 安装);仅 ALLOW_MISSING_DENY=1 make verify 可作本地探查,且该结果不可提交。新增依赖须过 cargo deny check 并在 PR 说明理由(见 §5)。