|
|
@@ -107,18 +107,35 @@ try {
|
|
|
bad(`feature_list.json 无法解析:${err.message}`);
|
|
|
}
|
|
|
|
|
|
-// ── 4. progress.md 里的会话编号不重复 ──────────────────────────────────
|
|
|
+// ── 4. progress.md 里的会话编号不重复、且按时间正序(旧 → 新)──────────
|
|
|
try {
|
|
|
const text = readFileSync(join(HARNESS, 'progress.md'), 'utf8');
|
|
|
const seen = new Map();
|
|
|
+ const order = [];
|
|
|
for (const m of text.matchAll(/^## Session (\d+)/gm)) {
|
|
|
const n = Number(m[1]);
|
|
|
seen.set(n, (seen.get(n) || 0) + 1);
|
|
|
+ order.push(n);
|
|
|
}
|
|
|
for (const [n, count] of seen) {
|
|
|
if (count > 1) bad(`progress.md 里 Session ${String(n).padStart(3, '0')} 出现了 ${count} 次`);
|
|
|
}
|
|
|
if (!seen.size) warn('progress.md 里没有任何 Session 记录');
|
|
|
+
|
|
|
+ // 顺序:必须是升序(最新在最下面,与根 README 的日期节一致)。
|
|
|
+ // 这条被违反过 —— 一度是倒序(新的在最上),用户指出后才改回来。
|
|
|
+ const outOfOrder = [];
|
|
|
+ for (let i = 1; i < order.length; i++) {
|
|
|
+ if (order[i] < order[i - 1]) {
|
|
|
+ outOfOrder.push(`Session ${String(order[i - 1]).padStart(3, '0')} 之后跟了 Session ${String(order[i]).padStart(3, '0')}`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (outOfOrder.length) {
|
|
|
+ bad(
|
|
|
+ `progress.md 的会话记录不是正序(旧 → 新,最新在最下面):${outOfOrder.slice(0, 3).join(';')}` +
|
|
|
+ `${outOfOrder.length > 3 ? ` 等 ${outOfOrder.length} 处` : ''}`
|
|
|
+ );
|
|
|
+ }
|
|
|
} catch (err) {
|
|
|
bad(`progress.md 读取失败:${err.message}`);
|
|
|
}
|