no-stale-templates-path.test.js 3.26 KB
/**
 * `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('');
  });
});