审查Diosix
Diosix中的每一处代码和文档变更在提交或合并前都必须通过严格的多视角审计。绝不要草率通过变更,也绝不要签署损坏、不完整或未经验证的代码。以下审查标准与developing-diosix和documenting-diosix严格一一对应,以便应用创作技能能够消除提交前和合并前的返工。
强制性四步验证工作流
- 构建、完整性及测试门禁(基本要求):
- 验证功能是否按照设计100%实现,不存在
TODO存根、死代码或模拟的生产路径。 - 当重构超过500行限制的文件时,绝不截断功能或单元测试;始终将过大的文件组件化为内聚的子文件夹(如
vm/run.zig、panes/modal.zig、tests/gui.zig),而不是使用扁平的prefix_subname.zig文件,并验证每个子模块是否在其父级的test块中被引用(如_ = @import("vm/run.zig");),以便zig build test能够执行其单元测试。 - 验证单元测试是否与其测试的
.zig源文件位于同一位置,集成测试是否位于独立的tests/目录中。 - 将文件格式和行/列检查的范围限定为受跟踪的源目录(
build.zig、hypervisor、tools、scripts),而不是在.zig-cache/或zig-out/上运行无范围限制的递归glob。 - 运行
./scripts/build.sh test --summary all和./scripts/build.sh,直到所有编译和测试步骤100%通过且零警告或泄漏。
- 验证功能是否按照设计100%实现,不存在
- 四角色深度审查:
- 通过四种不同的视角审计每个修改过的文件及其周围上下文:
- 怀疑型资深工程师(完整性、惯用法、子文件夹层级而非扁平的
prefix_subname.zig文件、小写十六进制字面量0xfff、命名常量/辅助函数如PAGE_OFFSET_MASK和crossesPageBoundary而非魔法位掩码、无Spinlock/对齐/路径验证器的复制粘贴重复、无用于内部路径的历史候选列表回退数组如DEFAULT_GUEST_CANDIDATES、显式固定宽度u64ABI类型而非usize、在含有字面量的@min/@max上添加显式usize类型注解、对超过500行的文件进行组件化而不截断、不超过80列的限制、动态与静态缓冲区、将策略外部化到构建/运行时配置、不在Zig中动态合成二进制/ELF/映像、不在tools/overlay-common/内生成文件) - 偏执安全专家(虚拟机监视器熔断半径隔离、对客户内存的单次复制双重获取/TOCTOU预防、通过
atomic.Spinlock实现IRQ安全锁定、加密/页面零化、带检查的算术边界) - Diosix维护者(模块化、可读性、
defer/errdefer、ABIcomptime大小/偏移断言、外部契约向后兼容性与原子化树内迁移、子模块测试覆盖) - 新手与专家用户(零负担用户体验、清晰英文错误信息、配置灵活性、性能)
- 怀疑型资深工程师(完整性、惯用法、子文件夹层级而非扁平的
- 通过四种不同的视角审计每个修改过的文件及其周围上下文:
- Rust风格借用检查与指针生命周期审计:
- 手动追踪所有控制流路径上的每个指针、切片和分配,以保证零释放后使用(UAF)、双重释放、调整大小/重新映射时的指针无效化或悬挂的栈引用。
- 文档、拼写及风格门禁:
- 验证
docs/与所有代码变更一致(包括SBI FID、C结构体类型、CLI标志和模块化文件路径),使用清晰、语法正确的美式英语编写并通过拼写验证,且符合docs/style-guide.md和docs/development.md。 - 在任何审查修复后,重新运行
zig fmt --check build.zig hypervisor tools scripts和./scripts/build.sh test --summary all。
- 验证
- 不确定时,停止并询问首席维护者:如果审查发现了架构权衡或缺少的原语,在做出假设之前停止并询问首席维护者以获取指示。
重点参考指南
在每次审查期间查阅以下参考清单: