fix(reasoning): preserve ready material question target

This commit is contained in:
2026-08-13 09:36:10 +01:00
parent 854c3aa002
commit 54bc48342b
4 changed files with 705 additions and 12 deletions
+53 -6
View File
@@ -108,9 +108,8 @@ describe("buildGraphUpdatePrompt", () => {
expect(prompt).toContain(
"selectedQuestion.question must be one narrow non-compound question",
);
expect(prompt).toContain(
"engine retains deterministic final-priority selection",
);
expect(prompt).toContain("deterministic prerequisite ordering");
expect(prompt).toContain("formulation authority");
});
it("instructs the model to preserve user-supported meaning separately from inference", () => {
@@ -587,10 +586,10 @@ describe("buildGraphUpdatePrompt — 57J.59 selected-question contract alignment
expect(getRule(prompt, 16)).toContain("does not need to be the highest-scoring unknown");
});
// Test 4 — engine retains deterministic final-priority ownership
it("test 4: rule #16 states engine retains deterministic final-priority selection", () => {
// Test 4 — engine retains deterministic prerequisite-aware selection
it("test 4: rule #16 states engine retains deterministic prerequisite-aware selection", () => {
const prompt = buildGraphUpdatePrompt(makeContext());
expect(getRule(prompt, 16)).toContain("engine validates your candidate and retains deterministic final-priority selection");
expect(getRule(prompt, 16)).toContain("engine validates your candidate and retains deterministic prerequisite ordering");
});
// Test 5 — null remains permitted when the triggering condition does not apply (rule #20)
@@ -863,3 +862,51 @@ describe("60B.4 decision materiality rule", () => {
expect(sufficiencySection).toContain("should not remain open merely because some uncertainty still exists");
});
});
// ============================================
// 60B.11 — prompt prerequisite-aware targeting clarity
// ============================================
describe("60B.11 — prompt prerequisite-aware targeting", () => {
let prompt;
beforeAll(() => {
const testNode = makeNode({
id: "n-test-decision",
label: "Test Decision",
kind: "state",
status: "supported",
});
prompt = buildGraphUpdatePrompt({
situationGraph: {
nodes: [testNode],
edges: [],
},
});
});
it("clarifies material continuation factor → selectedQuestion.nodeId", () => {
expect(prompt).toContain("selectedQuestion.nodeId");
});
it("mentions prerequisite ordering for model selection guidance", () => {
expect(prompt).toContain("prerequisite ordering");
});
it("does NOT give the model unconditional final authority", () => {
expect(prompt).not.toContain("unconditional");
expect(prompt).not.toContain("final-priority");
});
it("states deterministic validation and formulation authority", () => {
expect(prompt).toContain("formulation authority");
});
it("mentions prefers model-selected node when no unresolved depends_on prerequisites", () => {
expect(prompt).toContain("depends_on");
});
it("does NOT duplicate the materiality scoring rule", () => {
// The prompt should clarify targeting but not redefine materiality
expect(prompt).not.toContain("materiality score");
});
});