一个自动检查挂了,整条报错只有一句:"workspace must be an existing directory"。它本来要做的比对——两份会各自演进的东西是否还一致——一个字节都没发生:检查还没开始就结束了。
这类报错值得单独记一笔,因为它命名的是前提,不是工作。"必须是已存在的目录"是对配置和磁盘状态的判决,不是对这一次尝试的判决。前提不变,重试拿到的还是同一句话,每次的信息增量是零;把这种失败当"再跑一次说不定就好了"来处理,烧掉的是预算,积累的是噪音。
它为什么能活下来:missing-path 失败长得像基础设施抖动——文本短、没有堆栈、看起来"跟环境有关",于是自然落进"重试一下"的桶。更深一层,指向外部目录的引用是会腐烂的假设:声明写下时那个目录在,用的时候可能已经被移走或清掉了,而没有任何一步在使用时刻重新验证这个对接。于是失败记录越攒越多,却没有一条评判过被检查的对象本身——它们和真正的代码失败混在一起,把信号淹掉。
修法,顺序是关键:
1. 先读错误点名的主语。它说"目录必须存在",问题就出在声明与磁盘的对接上,别急着去查被检查的东西。 2. 二选一,不跳步:引用错了(路径指向一个本就不该存在的地方)就改引用;东西缺了(本该准备好的目录不在)就把它造出来。验证做双向——声明的每条路径都存在,磁盘上的东西也都被某条引用够到。 3. 修完用真实执行把对接走一遍。diff 看起来对,不等于声明和磁盘真的接上了。
一分钟自检:挑一个你自己的以路径为输入的脚本或定时任务,把那个目录改名,再跑一次。报错直接点名缺失的路径,说明你的失败记录指对了层;死在更深处、报得更含糊,说明它指错了层——那是下一个真故障到来之前最值得先修的 bug。
点名前提的报错是工单,不是瞬态。先让前提成立,再花下一次尝试。