跳转至

阅读指南

Herdr 的代码量不适合从 main.rs 一路点进所有调用。更高效的方式是先选一条“旅程”,只在遇到所有权或状态转换时横向展开。本页说明本站的证据标准、章节结构和几条适合不同目标的阅读路线。

拆解方法

参考项目中的深度拆解方式后,本站采用五层阅读法。

第一层:先找必须解决的问题

每章先给出系统约束。例如“服务器升级不能杀死 Agent”比“handoff.rs 有哪些函数”更能解释代码。没有问题背景,错误处理和序列号看起来都像偶然复杂度。

第二层:画完整旅程

把入口、通道、状态、运行时资源和输出放在一张图中。旅程图用于回答“数据下一站去哪里”,而不是替代代码。

第三层:锁定领域类型与所有权

优先读 struct/enum,然后才读 handler。对 Herdr 尤其要问:

  • 这个字段是可序列化事实、派生缓存,还是活跃 OS 资源?
  • 谁是唯一写者?
  • 跨线程/进程后,使用 ID、消息还是锁共享?
  • 它属于服务器、某个客户端,还是当前视图?

第四层:追正常路径与失败路径

正常路径只说明功能能跑;失败路径才暴露真实边界。因此每章都特别检查:

  • 半完成操作怎样撤销;
  • 队列满、客户端慢、进程退出时怎样降级;
  • 旧异步结果如何被 sequence/generation 拒绝;
  • 缓存基线何时可以安全推进。

第五层:用测试和静态守卫反证理解

测试名经常比注释更准确地表达维护者不愿破坏的契约。本站把单元测试、集成测试、Python 架构守卫和 CI 放在同一张证据图里,而不是把“测试”当作最后一个孤立章节。

源码链接规则

所有上游链接固定到提交:

bbd7c2094a44fcbcc4a3a3aedef236c4d697d793

例如:src/main.rs。这样做有三个好处:

  1. 页面今天和半年后指向同一份实现;
  2. 行号锚点不会因上游新提交漂移;
  3. 读者可以用同一提交复现实验和统计。

版本边界

本站不是 Herdr 永久不变的官方架构说明。它是对 0.8.0、固定提交的证据化剖面。后续上游演进应重新审计,而不是把本文结论直接套用。

四条阅读路线

图和伪代码怎么读

  • Mermaid 图描述关系或时序,不保证节点名与 Rust 标识符一一相同;
  • 标有 rust 的代码若使用 …,表示为了说明形状而裁剪;
  • 标有“等价伪代码”的片段重组了控制流,不应复制进项目;
  • 表格中的“设计含义”属于基于源码的解释,不是上游公开承诺。

先记住的六个区分

容易混淆的概念 正确区分
AppState / App 前者以纯状态为中心;后者还拥有通道、任务、deadline、cache 等协调资源
TerminalState / TerminalRuntime 前者可持久化、服务器拥有;后者包裹活跃 PTY/VT/actor
PaneId / public pane id / TerminalId 布局内部节点身份 / 用户可见稳定编号 / 运行时重连键
compute_view / render 前者允许更新派生几何和 resize;后者只读绘制
screen detection / integration hook 启发式可见证据 / Agent 主动上报的会话证据
client protocol / local API 二进制交互帧 / 行分隔 JSON 自动化接口

带着这六个区分进入正文,许多“为什么同一概念有两个类型”的问题会自然消失。