fix(排程): 拒絕重複的工作包 index

同一個 index 出現兩次時,相依看的是後者、標題與人天卻取到前者,算出來的時程是
兩份定義混出來的東西,而且回傳 ok:true 完全不報錯。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 14:05:19 +08:00
co-authored by Claude Opus 5
parent 3f580ddae2
commit dfa7edc275
+8
View File
@@ -66,7 +66,15 @@ function readPlan(planFile) {
throw new ScriptError('BAD_PLAN', 'workPackages 需為非空陣列');
}
const seen = new Set();
for (const wp of plan.workPackages) {
// 同一個 index 出現兩次時,相依看的是後者、標題與人天卻取到前者,
// 算出來的時程會是兩份定義混出來的東西,而且完全不會報錯
if (seen.has(wp.index)) {
throw new ScriptError('BAD_PLAN', `工作包 #${wp.index} 在計畫裡出現了不只一次`);
}
seen.add(wp.index);
if (!Number.isInteger(wp.index) || wp.index <= 0) {
throw new ScriptError('BAD_PLAN', `工作包的 index 需為正整數,收到的是 ${wp.index}`);
}