看起来不对的时候
本地服务栈的大部分困惑,缺的是一条事实,不是服务坏了。这一页把一个症状路由到那条命令——它负责产出缺失的事实——再指向讲清它的章节。
先做那次读取
几乎所有症状的第一条命令都是 oberth status:它把清单、运行记录和观察到的运行事实并排打印出来。如果它给出了失败原因,先读那个原因再看日志——原因点明了是哪个服务、哪个阶段。
oberth status
症状对应的第一条命令
| 你看到的 | 先运行 | 它意味着 |
|---|---|---|
listening unknown,或某个 observation_* 代码 | oberth doctor --only listener_observation | 是观察者读不到监听表,不是服务出了问题。换一个普通终端重试;不要把它读成失败。 |
up --wait 一直不返回 | oberth logs <service> --once | 就绪是监听加健康。服务自己的输出会说明是哪一半没成。 |
| 某一行服务带着退出与退出码 | oberth logs <service> --once --first-error | 当前运行的第一条错误,而不是最后一屏输出。 |
auto port unassigned | oberth status --json | 不是失败:port: auto 还没有被分配。候选端口靠绑定验证,不靠相信一张空的监听表。 |
code_changed_since_start | oberth restart | 进程跑的是比 checkout 更旧的代码。这是代码事实,不是运行失败。 |
| 停止碰到了别的项目,或者直接拒绝 | oberth down --worktree <path> | 多个 checkout 用了同一个项目名。显式指明是哪个 checkout,不要把停止范围放大。 |
| checkout 已删除,服务还在跑 | oberth worktrees --gone | 身份账本记得那条路径。按 worktree 或 identity 停掉它们;删除数据仍然是你的事。 |
| “manifest not found”,或者一份没被采纳的草稿 | oberth init | agent 可以起草清单;只有 oberth init adopt 能让它成为任何事情的输入。 |
| 项目不在你的 HOME 目录下 | 审阅后用 oberth up --allow-outside-home | HOME 边界是默认值,不是意外。传这个 flag 之前先读懂它。 |
求助时该留下的东西
- 确切的命令和它的退出码,而不是“它打印了什么”的转述。
- 同一个 checkout 上的
oberth status --json,让读者看到同一份事实。 - 当前运行的第一条错误:
oberth logs <service> --once --first-error。 - 如果
observation出现过,观察者说了什么:哪个代码,来自哪一类进程。