From cb707c01929a5769e909a61817b315541b8bbd33 Mon Sep 17 00:00:00 2001 From: robbond Date: Wed, 26 Aug 2026 14:06:51 +0100 Subject: [PATCH] test(confidence-engine): capture tentative mapping regression --- .../focused-deconstruct-regression-cases.mjs | 20 +++++++++++++++++-- .../focused-investigation-boundaries.test.js | 8 +++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/graph/focused-deconstruct-regression-cases.mjs b/tests/graph/focused-deconstruct-regression-cases.mjs index 728c4bb..4759cdc 100644 --- a/tests/graph/focused-deconstruct-regression-cases.mjs +++ b/tests/graph/focused-deconstruct-regression-cases.mjs @@ -205,6 +205,21 @@ It must NOT be strengthened into: - exception escalation makes delegation safe - payment success proves readiness for other work`, }, + { + id: "tentative-condition-must-not-map-to-specific-items", + centralStatement: + "I want to reduce how dependent the business is on me for routine operational work, but I am not sure how much responsibility I can realistically hand over to my team yet. I want to understand what is genuinely preventing more delegation rather than just assuming I need to stay involved.", + targetLabel: + "Concrete capability gaps, process maturity levels, or approval authority restrictions limiting delegation", + targetDescription: + "What is actually stopping further delegation right now — not hypothetical constraints but the real bottleneck in the current evidence.", + question: + "What other routine tasks do you currently handle yourself, and does each one require specific training, a documented process, or a defined approval threshold before it can be assigned to someone else?", + answer: + "I still handle customer quotations, purchasing, some supplier issues, technical questions from customers, scheduling work, and checking some larger or unusual payments. I don't think all of those actually require me personally. Some probably just need a clear process or an approval limit. Technical questions may depend on experience, but I haven't separated which ones genuinely need my knowledge from the ones the team could answer. I also haven't documented who could currently take over each of these tasks.", + manualReviewCriteria: + `Observation fidelity — must preserve the stated facts without strengthening them:\n\n- the listed tasks (quotations, purchasing, supplier issues, technical questions, scheduling, payments)\n- user does not think all necessarily require them personally\n- "some probably" may need process/approval\n- technical-question boundary is unresolved\n- ownership/takeover mapping is undocumented\n\nTentative wording must remain tentative.\n"some probably just need..." must NOT become a definite "some only need..."\nunless equivalent uncertainty remains explicit.\n\nAssumption restraint — the following must be rejected as OVERREACH:\n- quotations are delegable with process/approval\n- payments are delegable with process/approval\n- specific named tasks are feasible to delegate because of the generic "some probably" statement\n- process/approval is sufficient\n- deep expertise is unnecessary\n\nThe invariant: A general or unspecified statement about "some" items must not be attached to particular items from a preceding enumeration unless the user makes that mapping.\nAlso: Tentative/probabilistic language must not be strengthened into definite feasibility/readiness claims.\nassumptions: [] is valid.\n\nFrontier: Do NOT over-specify the exact winning frontier.\ntechnical capability, ownership mapping and process/authority are same-level alternatives.\nThe selected uncertainty must be:\n- directly grounded in the answer text\n- investigation-relevant\n- does not depend on invented item-to-condition mappings\nDo not turn an underdetermined frontier into a false exact-answer test.`, + }, ]; // ── Deterministic fixture-integrity assertions (zero live calls) ───────── @@ -217,14 +232,15 @@ export const FOCUSED_DECONSTRUCT_REGRESSION_CASE_IDS = [ "tentative-observation-fidelity", "genuine-dependency-frontier", "structural-frontier-over-working-example-detail", + "tentative-condition-must-not-map-to-specific-items", ]; export function validateRegressionFixtureIntegrity() { const errors = []; - if (FOCUSED_DECONSTRUCT_REGRESSION_CASES.length !== 7) { + if (FOCUSED_DECONSTRUCT_REGRESSION_CASES.length !== 8) { errors.push( - `Expected exactly 7 regression cases; got ${FOCUSED_DECONSTRUCT_REGRESSION_CASES.length}`, + `Expected exactly 8 regression cases; got ${FOCUSED_DECONSTRUCT_REGRESSION_CASES.length}`, ); } diff --git a/tests/graph/focused-investigation-boundaries.test.js b/tests/graph/focused-investigation-boundaries.test.js index a0a3259..e811ccc 100644 --- a/tests/graph/focused-investigation-boundaries.test.js +++ b/tests/graph/focused-investigation-boundaries.test.js @@ -235,8 +235,8 @@ describe("validateFocusedDeconstructSchema", () => { // ── Regression fixture integrity (zero live calls) ────────────────────────── describe("FOCUSED_DECONSTRUCT_REGRESSION_CASES fixture integrity", () => { - it("has exactly 7 cases", () => { - expect(FOCUSED_DECONSTRUCT_REGRESSION_CASES.length).toBe(7); + it("has exactly 8 cases", () => { + expect(FOCUSED_DECONSTRUCT_REGRESSION_CASES.length).toBe(8); }); it("all IDs are unique", () => { @@ -249,7 +249,7 @@ describe("FOCUSED_DECONSTRUCT_REGRESSION_CASES fixture integrity", () => { expect(ids).toContain("structural-frontier-over-working-example-detail"); }); - it("preserves all six original case IDs", () => { + it("preserves all original case IDs and includes the new eighth case", () => { const ids = FOCUSED_DECONSTRUCT_REGRESSION_CASES.map((c) => c.id); for (const origId of [ "nearest-frontier-wins", @@ -258,9 +258,11 @@ describe("FOCUSED_DECONSTRUCT_REGRESSION_CASES fixture integrity", () => { "juxtaposition-must-not-create-link", "tentative-observation-fidelity", "genuine-dependency-frontier", + "structural-frontier-over-working-example-detail", ]) { expect(ids).toContain(origId); } + expect(ids).toContain("tentative-condition-must-not-map-to-specific-items"); }); it("validateRegressionFixtureIntegrity reports zero errors", () => {