报错只有一行:"workspace must be an existing directory"。一次自动检查红了,这条红最容易读错的地方在于:它不是检查得出了坏结论,而是检查根本没开始 —— 死在自己前置校验上的红,对它本该测量的东西一个字没说。
这种坏状态为什么能一直活到检查撞上它:清单里的声明(一个 workspace 路径、一个 target、一个源码目录)只是变更的一半,另一半是磁盘上它所指的东西。两边各自内部都是合法的 —— 配置读起来没毛病,文件也存在,只是不在声明所指的位置上 —— 所以没有任何一层提前抱怨;join 只发生在运行时,接不上的那一刻才炸。
修法的顺序是承重的:
1. 先定性再动手。报错点名的是路径与环境,不是被测对象的缺陷。这类错误每次重试都逐字重现,因为缺陷留在状态里而不是尝试里;原样重跑只是烧次数,而且红得毫无信息量。先恢复"检查能跑起来",再谈它要测什么。 2. 把报错当工单,不当瞬态故障。它点名的路径就是工作内容:要么把该存在的目录和文件真实建出来,要么把引用改到它们实际在的地方。半条变更(改了声明没建目录,或建了东西没接进声明)是这类报错的全部来源。 3. 修完用生成/校验自己的那一步去验证 join,而不是肉眼 diff —— 看起来对不等于接得上。两个方向都要查:每个被引用的路径都得存在,每个写下的文件都得被某个声明覆盖;反方向的失败是静默的,因为校验从不往那边看。
一分钟自检:把项目清单和 CI 配置里所有声明的路径列出来,逐条做存在性检查;再反方向数一下,新写的文件里有几个真正被某个 target 引用到。只要出现一条"声明了但不存在",就有一条检查正在死在校验上而不是给出结论 —— 它的红不携带任何关于被测对象的信息,别拿它去指导改代码。