SOLECA794

code-review-principles

Use when reviewing kernel changes, running periodic engineering audits of a subsystem, or writing review guidance for agents. Focus on architecture, owner boundaries, local semantic integrity, concurrency, ABI containment, resource lifetime, failure paths, and justified complexity — not syntax.

SOLECA794 0 Updated 2w ago
GitHub

Install

npx skillscat add soleca794/os-learning-2026/code-review-principles

Install via the SkillsCat registry.

SKILL.md

Code Review Principles(代码评审规范)

评审假设

提交的代码已经能编译,基本语法不是评审目标。评审的是:改动是否破坏内核行为、架构、可维护性、可调试性,特别是在并发与失败条件下。

评审范围限定在请求的文件/子系统/patch,除非证据显示风险跨界。具体结论必须指向代码路径、不变量、日志、测试或外部可见行为。

四级问题分级

级别 含义 处理
Apollyon 错误结果、数据损坏、安全问题、崩溃、严重不可恢复状态 必须修复
Keter 今天不爆炸,但明确阻塞后续开发:模块边界错位、状态所有权混乱、核心抽象方向错误 必须修复
Euclid 值得修但不阻塞主线:不优雅设计、局部耦合、命名平庸、可重构代码 通常修
Safe 纯风格偏好、理论洁癖、为抽象而抽象、只影响推测性未来 只记录,默认不修

级别标准必须严格:Keter 级结论必须点名具体证据(当前形状已经混淆 owner/真相源、泄漏 ABI 或私有表示、使生命周期/协议不可审计、阻塞已命名的当前或下一阶段路径)。仅凭"未来可能有维护问题"是 Euclid 或 Safe。

评审维度清单

1. 系统架构

  • 改动是否符合当前子系统边界、所有权模型、分层?
  • 子系统间是否通过显式接口通信,而不是摸另一子系统的私有类型/锁/内部状态?
  • 跨域交接是否有一个协议 owner、每个可变状态一个 owner、显式的交接点与最终 cleanup owner?
  • 文件持续膨胀时,是"一个 owner 干一件事"还是多角色混装(应拆分)?

2. 并发与竞态

  • 共享可变状态由哪个锁/原子规则/中断规则/所有权转移保护?
  • 锁顺序、跨解锁生命周期、唤醒与取消路径、TOCTOU 窗口。
  • 错误路径、早返回、部分初始化是否留下 waiters/引用/映射/标志不一致?
  • "常见路径能跑"对可抢占、可中断、可重入、可被另一线程观察的内核代码不够。

3. ABI 包含与兼容语义

  • syscall/用户可见 API:flag 校验、errno 映射、信号行为、结构体布局、对齐、边界用例。
  • Linux ABI 表示只允许出现在 syscall/兼容边界,进入核心子系统前必须转换为内部领域类型。
  • 区分"不支持的功能"与"非法输入/权限失败"——返回错误码错误会破坏测试与用户态。
  • 检查边界:零大小、最大大小、溢出、未对齐地址、空指针、重复 flag、未知 flag、混合模式。

4. 资源生命周期与清理

  • 追踪内存、frame、fd、dentry、inode、task、wait queue、mapping、设备状态的所有权。
  • 每个 acquire 在成功/失败/取消/拆除路径上都有匹配的 release。
  • 查找泄漏、双重释放、悬垂引用、发布早于初始化完成。

5. 安全与信任边界

  • 用户指针、设备数据、文件系统元数据、外部输入一律视为不可信。
  • 检查 copy-in/out 顺序、边界、整数溢出、权限检查、内核数据暴露。
  • 验证先于不可逆副作用(除非 ABI 要求相反)。

6. 失败路径与降级

  • 分配失败、I/O 失败、部分拷贝、中断等待、无效句柄、不支持平台路径。
  • 失败后状态要么不变,要么有文档地前滚。
  • 优先显式错误而非静默回退(当调用者/测试需要区分行为时)。

7. 清晰度与本地语义

  • 小函数 + 显式不变量 + 让非法状态难以表示的命名与数据结构。
  • 避免聪明控制流、隐藏副作用、宽泛 catch-all helper、重复兼容逻辑。
  • 可推导字段不缓存(除非性能/快照/诊断理由成立并注释)。
  • 诊断字段标注"不参与行为决策";缺失这类注释属于维护风险,不是风格问题。
  • 注释解释非显然的不变量/ABI 取舍/锁顺序/临时桥/移除条件,不重复代码表面。

评审输出格式

结论:<是否批准 / 需修改 / 需停止>,对应当前边界
Apollyon/Keter 发现:
  - <级别> <代码路径>:证据 + 影响 + 最小修复方向
Euclid 发现:<仅列出值得修的>
Safe 发现:<仅记录>
验证缺口:<哪些声明缺 agent-run/user-run 证据>
  • 剩余观测全是 Safe 时停止收集问题,不为保持评审而升级。
  • 发现授权"整改",不授权"自动重构":建议的修复必须留在当前 Implementation Boundary 内;修复会跨边界时,停下请求 owner/ABI/契约决策。

Categories