1576d7b709
同一个谎有两处,根因是「联没联上」有两套判定:列表只取样 JUNCTION_SPECS 首项 (.venv),而 adopt 填两条。于是「有 .venv、缺 simulator/SDL2」的半联树被报成已联, adopt 遇主线缺 SDL2 走 skip、联接失败走 warn,回来照样打「现在可以跑」——宣布就绪。 改法是把判定收成一处: - 新增 junction_states() 三态(link / real 实体内容 / absent 真缺)与 junction_label(), plugin_trees() 改读三态;adopt_junctions() 也改读同一函数,消除两处逻辑分叉。 - 列表按缺的那一样分别说后果:缺 .venv 会**静默**落到机器级解释器(无 fontTools, 即 generated-fresh 假红的老根因);缺 simulator/SDL2 是模拟器当场报错(CMakeLists.txt 的 SDL2_DIR 是裸 set,没有环境变量逃生口)。实体目录单列齐(实体SDL2),不算共享。 - adopt 补完复算一次,仍缺就打「还不能算就绪」,不再打「现在可以跑」;锁归属与 锁命令照常打印。 - SKILL.md 同步四处措辞,并把「adopt 之前跑不了 Python」这条不准确的说法换成上面 两种真实失败方式(一条是静默错解释器、一条是响亮报错)。 验证:scratch 仓 16 条断言全 PASS(全联 / 只摘 SDL2 那条 → 缺 SDL2 且不得再出现已联 / 实体目录不被覆盖 / unadopt 只摘联接 / 主线缺 SDL2 时 skip + 不报就绪 / 已联的 .venv 不误报 / 两样都缺 → 缺 .venv+SDL2),同一半联态上新旧对照 = 缺 SDL2 vs 已联。 py_compile 通过;doc-links --all --sections-strict 与编号门禁绿;两文件无 BOM、无 U+FFFD、纯 LF、无行尾空格。改动只落在 .dsh/,不进体积门禁指纹面,也不需要 @build。