/** * `system/templates/` 已随 28 号改造整体并入 `system/agents/`,目录不存在了。 * 这条锁的是:**agent 运行时真会读到的那些文件里,不许再出现这个已死的路径。** * * 为什么单独锁「活定义」而不是全仓禁字面量: * 这个字符串在仓库里有三种完全不同的身份,只有第一种是缺陷。 * * 1. **活定义**(本条守的)—— 本体提示词(agent.md / soul.md / tools.md)、 * skill 里的 js、图模板 README、mock fixture。agent 照着它去读写, * 路径不存在时 `existsSync` 守卫会静默跳过、或者相对路径在 cwd 下造出一棵野生嵌套树。 * 两种都**不报错**。`innovator-hunt/collect_seed.js` 真的这么造过一棵 * `system/agents/innovator-hunt/system/templates/...`。 * 2. **历史说明**(server/ 下的注释、docs/done/、tasks/)—— 「原来指向 X,28 批次 1 并进了 Y」。 * 这类解释了代码为什么长这样,删掉是净损失。 * 3. **迁移完成的证明**(server/tests/ 里断言该目录已不存在的守卫)—— * 删掉等于删掉证据。 * * 所以扫描范围限定在 `system/` 与 `fixtures/` 下**被 git 跟踪**的文件: * 跟踪 = 人工维护的定义,未跟踪 = 运行态产物(旧会话日志、历史完工报告,那些是记录,不该改)。 * `train/` 例外掉,那底下是历次训练的报告与产物,同样是记录。 */ const { execFileSync } = require('child_process'); const fs = require('fs'); const path = require('path'); const REPO_ROOT = path.resolve(__dirname, '../../..'); const DEAD_PATH = 'system/templates'; function tracked(...dirs) { const out = execFileSync('git', ['ls-files', '--', ...dirs], { cwd: REPO_ROOT, encoding: 'utf-8', maxBuffer: 32 * 1024 * 1024, }); return out.split('\n').filter(Boolean).filter((p) => !p.includes('/train/')); } describe('已死路径 system/templates 不出现在活定义里(28 号改造)', () => { const files = tracked('system/', 'fixtures/'); it('扫描样本非空 —— 防止 git 命令失灵时本条退化成永远通过', () => { // 没有这一条,`git ls-files` 一旦返回空(跑在非 git 环境、路径写错), // 下面那条断言会以「零违例」的形式全绿 —— 一条永远通过的守卫等于没有守卫。 expect(files.length).toBeGreaterThan(200); }); it('本体提示词 / skill / 图模板 / fixture 里都不再引用它', () => { const offenders = []; for (const rel of files) { const abs = path.join(REPO_ROOT, rel); let src; try { src = fs.readFileSync(abs, 'utf-8'); } catch { continue; // 二进制或已删除的索引项,跳过 } if (!src.includes(DEAD_PATH)) continue; src.split('\n').forEach((line, i) => { if (line.includes(DEAD_PATH)) offenders.push(`${rel}:${i + 1} → ${line.trim().slice(0, 110)}`); }); } expect(offenders).toEqual([]); }); it('目录本身在磁盘和 git 里都已不存在', () => { expect(fs.existsSync(path.join(REPO_ROOT, DEAD_PATH))).toBe(false); expect(execFileSync('git', ['ls-files', '--', DEAD_PATH], { cwd: REPO_ROOT, encoding: 'utf-8' }).trim()).toBe(''); }); });