感谢你愿意为 工作提醒助手 出力。
本项目是 Rust + Tauri 2 实现的独立工具,工程要求只有一条:能跑、测得住、说得清。
| 你想改的东西 | 去哪 |
|---|---|
| 源码 | tauri/ |
| 文档 | README.md、docs/ |
| 依赖与许可声明 | THIRD-PARTY-NOTICES.md |
| 变更记录 | CHANGELOG.md |
| Issue / PR 模板 | .github/ |
跨项目的改动(例如统一错误处理风格、统一的目录约定)请开一个 PR 只做这件事, 不要夹带在某个功能 PR 里——这类改动 review 成本高,混在一起会拖慢合并。
| 必需 | 版本 |
|---|---|
| Rust(stable toolchain) | 2021 edition 起 |
不需要额外的数据库、消息队列或容器。所有项目都能在离线环境构建和测试, 这是本仓库的硬约束之一。
cd tauri/reminder-core && cargo test --lib # 67 项测试不通过不要提交。确实需要临时跳过某条测试,请在 PR 描述里写明原因和恢复计划。
# Rust —— clippy 应零告警
cd tauri/reminder-core && cargo clippy --release改动行为就要改测试。这里的判定标准很直接:
| 改动类型 | 必须补的测试 |
|---|---|
| 新增功能 | 正常路径 + 至少一个边界/异常路径 |
| 修 Bug | 一条能复现原缺陷的回归测试 |
| 重构 | 现有测试全绿即可,不强制新增 |
| 改文档 | 无需 |
回归测试是硬要求。没有回归测试的 Bug 修复 PR 会被打回。
各语言遵循社区主流风格,不引入私有格式工具:
- Go:
gofmt输出即标准,不手改格式 - Rust:
rustfmt默认配置,cargo clippy零告警 - C#:4 空格缩进,
dotnet build零警告 - JavaScript:2 空格缩进,单引号,分号结尾;纯前端项目不使用框架语法糖
通用约定:
- 注释解释「为什么」,不解释「做了什么」——代码本身已经说清楚了
- 面向用户的文案(错误提示、按钮文字)用中文,面向代码的标识符用英文
- 不提交生成物:
bin/、obj/、target/、dist/、构建产物、数据库文件一律 gitignore - 不提交第三方二进制依赖,用语言原生的包管理(
PackageReference/go.mod/Cargo.toml)
用 Conventional Commits:
<type>(<scope>): <简短描述>
<可选的详细说明:为什么改、影响什么>
| type | 用途 |
|---|---|
feat |
新功能 |
fix |
修 Bug |
docs |
只改文档 |
refactor |
不改变行为的重构 |
test |
增补或修改测试 |
chore |
构建、依赖、配置等杂项 |
perf |
性能优化 |
scope 用项目名或模块名:feat(pmvault): ...、fix(xmtool): ...。
示例:
fix(pmvault): 统一错误出口,内部错误不再进响应体
原先有 30 处直接把 err.Error() 写进 HTTP 响应,会泄露 SQLite 表名
和本机路径。改为按错误码收敛,原始错误只写日志。
- 先开 Issue 讨论——尤其是涉及架构、依赖引入、数据格式变更的。 直接甩 PR 容易白做。
- 从最新 main 拉分支:
git checkout -b feat/xxx。 - 一个 PR 只做一件事。混入无关格式化会淹没真正的改动。
- 描述里写清「为什么」。评审者关心的是动机,不只是 diff。
- 附上测试输出。CI 也会跑,但贴一份能省一轮等待。
- 敏感改动额外说明:涉及加密、凭据处理、命令执行、文件删除的, 请在描述里单列一节说明安全影响和你的验证方式。
- 测试全绿,且本地跑过
- 新行为有测试覆盖,缺陷修复有回归测试
- 没有提交生成物或第三方二进制
- 文档与代码一致(命令、路径、配置项名)
- 没有引入未在
THIRD-PARTY-NOTICES.md登记的新依赖 - 描述写清了动机
不要用公开 Issue 报告安全漏洞。 见 SECURITY.md 的私下报告流程。
参与即表示同意 CODE_OF_CONDUCT.md。