感谢你为 iztro-rs 做贡献。
本项目处于 1.0 之前阶段:排盘已实现并有 fixture 兜底,而特征提取、规则引擎与叙事解盘仍在演进。贡献应遵守 docs/ 下记录的架构设计。
桌面 GUI 内置了一个 CJK 字体,该字体由 Git LFS 跟踪,并在编译期通过
include_bytes! 嵌入。构建 iztro-gui 前,请安装
Git LFS 并确保资源已被检出(smudge):
git lfs install
git lfs pull若未使用 LFS,字体资源会停留在指针文件状态,GUI 将嵌入无效字节。
crates/iztro-gui/src/fonts.rs 中的守卫测试会在此情况下立即失败,
CI 也以 lfs: true 进行检出。
请阅读:
对于确定性逻辑,在可行时使用测试驱动开发:
- 添加或更新一个失败测试;
- 实现最小的确定性改动;
- 在测试保持通过的前提下重构。
这尤其适用于:
- 排盘逻辑;
- 历法与边界行为;
- 索引运算;
- 安星;
- 特征提取;
- 规则匹配;
- 判断聚合;
- 确定性报告渲染。
Rust 不使用类继承,因此本项目通过 Rust 惯用法理解 SOLID:
- 小模块;
- 小 trait;
- 显式契约;
- 组合优于继承;
- enum 表示封闭集合;
- trait 表示可扩展策略;
- 通过 trait 和 method profile 实现依赖倒置。
避免创建混合排盘、特征提取、规则求值和报告渲染职责的大型 trait 或模块。
主要文档在适用时应保持双语。
- 英文是工程规格的规范来源。
- 中文是紫微斗数术语的规范来源。
如果 PR 只更新一种语言的主要文档,请说明原因。
- 改动遵守已记录的层边界。
- 确定性行为有测试,或说明暂不添加测试的原因。
- 面向用户的术语与术语表一致。
- 适用时同步更新英文和中文文档。
- 如有新的架构决策,已补充 ADR。