diff --git a/frontend/tests/consult-limitation-line-contract-1834.test.ts b/frontend/tests/consult-limitation-line-contract-1834.test.ts new file mode 100644 index 00000000..3608fa1b --- /dev/null +++ b/frontend/tests/consult-limitation-line-contract-1834.test.ts @@ -0,0 +1,35 @@ +// #187 / BUG-1834 acceptance addition (Claude, 2026-11-09): brief item 7 was not in Grok's test file. +// The fixed line is written once in the contract's section F 6c note, outside every product block, so no +// text sent to the model contains it. +import assert from "node:assert/strict"; +import test from "node:test"; + +import { CONSULT_VERIFICATION_LIMIT_LINE } from "../src/lib/consult-answer-basis.ts"; +import { + productContractBlockRaw, + productRuntimeContractSource, + type ProductContractBlock, +} from "../src/lib/product-runtime-contract.ts"; + +const BLOCKS: readonly ProductContractBlock[] = [ + "runtime-contract", + "chat-method-boundaries", + "natal-instructions", + "mevg-blocked-policy", + "shared-reading", +]; + +test("the contract carries the line exactly once, on the 6c row", () => { + const source = productRuntimeContractSource(); + assert.equal(source.split(CONSULT_VERIFICATION_LIMIT_LINE).length - 1, 1); + const row = source.split("\n").find((line) => line.includes(CONSULT_VERIFICATION_LIMIT_LINE)) ?? ""; + assert.match(row, /^6c\. (BUG-1794,产品决定,偏离她的方法裁定)/); + assert.match(row, /产品负责人 2026-11-09 同意(BUG-1834)/); +}); + +test("no product block sent to the model contains the line", () => { + const source = productRuntimeContractSource(); + for (const name of BLOCKS) { + assert.doesNotMatch(productContractBlockRaw(name, source), new RegExp(CONSULT_VERIFICATION_LIMIT_LINE), name); + } +});