訂明本例驗收任務
假設工具計劃列明後續參數要取哪一步的哪個輸出欄。已有結果按步驟編號提供。指定欄須在該結果自身存在,且值與參數相同才通過;另一部有效編號也不能借用。
- 讀指定步驟及欄位引用
- 只查該前步結果
- 比對後續參數與該值
欠前步輸出便保留參數未綁定。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 借用了另一結果編號 | {"results":{"S1":{"caseId":"C7"},"S2":{"docId":"D2"}},"ref":{"step":"S1","field":"caseId"},"argument":"D2"} | {"status":"wrong-value","expected":"C7"} | S1.caseId 是 C7,D2 雖有效但屬 S2 文件。 |
| 正確步驟欄位 | {"results":{"S1":{"caseId":"C7"}},"ref":{"step":"S1","field":"caseId"},"argument":"C7"} | {"status":"bound","expected":"C7"} | 確切參數沿用已訂前步結果來源。 |
| 該欄未產生 | {"results":{"S1":{"docId":"D2"}},"ref":{"step":"S1","field":"caseId"},"argument":"C7"} | {"status":"missing-reference"} | 結果欠欄,不從記憶或其他呼叫補。 |
逐步處理 field-not-produced 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"status":"missing-reference"}。結果欠欄,不從記憶或其他呼叫補。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(!Object.hasOwn(x.results,x.ref.step)||!Object.hasOwn(x.results[x.ref.step],x.ref.field))return {status:'missing-reference'};
const expected=x.results[x.ref.step][x.ref.field];return {status:x.argument===expected?'bound':'wrong-value',expected};
}
const cases = [
{
"id": "wrong-result-id",
"input": {
"results": {
"S1": {
"caseId": "C7"
},
"S2": {
"docId": "D2"
}
},
"ref": {
"step": "S1",
"field": "caseId"
},
"argument": "D2"
},
"expected": {
"status": "wrong-value",
"expected": "C7"
}
},
{
"id": "correct-reference",
"input": {
"results": {
"S1": {
"caseId": "C7"
}
},
"ref": {
"step": "S1",
"field": "caseId"
},
"argument": "C7"
},
"expected": {
"status": "bound",
"expected": "C7"
}
},
{
"id": "field-not-produced",
"input": {
"results": {
"S1": {
"docId": "D2"
}
},
"ref": {
"step": "S1",
"field": "caseId"
},
"argument": "C7"
},
"expected": {
"status": "missing-reference"
}
}
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
計劃驗算保留引用來源及值。本例核對確切單值引用,沒有外部呼叫,也不批准之後寫入。