stilltrue 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,57 @@
1
+ # Changelog
2
+
3
+ ## 0.7.0
4
+
5
+ **A different value now counts as a contradiction.**
6
+
7
+ The judge used to answer `cant_tell` when a source stated its own figure for
8
+ the thing a claim quantified. Asked whether `apple.com/apple-card` supports
9
+ "Apple Card gives 10% Daily Cash back on every purchase", it reasoned:
10
+
11
+ > The source states that Apple Card offers 2% Daily Cash for most purchases,
12
+ > 3% at Apple and select merchants, and 1% on the titanium card, but it does
13
+ > not mention a 10% Daily Cash rate.
14
+
15
+ It had read every rate on the page and still treated the absence of the
16
+ claimed number as the claim being unaddressed. Nothing on that page denies
17
+ 10% in words, so the old wording — `cant_tell: the source does not address
18
+ the claim` — left it nowhere else to land.
19
+
20
+ Explicit denial is the rare shape of a false claim. The common one is a wrong
21
+ number, and a checker that goes quiet on wrong numbers is quiet exactly when
22
+ it is most useful. It also collapsed the distinction the verdict set exists
23
+ for: a claim the source contradicts and a claim the source never mentions
24
+ came back identical.
25
+
26
+ - `not_supported` now explicitly covers a source stating a DIFFERENT VALUE for
27
+ what the claim quantifies — a rate, price, date, count, duration or name.
28
+ - `cant_tell` explicitly excludes that case.
29
+ - The contradiction-quote rule gains the matching line: where the conflict is
30
+ a differing value, the sentence to cite is the one stating the source's own
31
+ value.
32
+ - "Compare like with like" ships in the same change, because the obvious
33
+ over-correction is ruling `not_supported` against a page that simply lists
34
+ several values for different cases.
35
+
36
+ **Minor, not patch.** The public API is unchanged, but verdicts change for the
37
+ same inputs — and for a library whose product IS the verdict, that should not
38
+ reach a consumer pinned to `^0.6.0` silently.
39
+
40
+ Verified against a local gpt-oss-20b (the weaker of two available engines),
41
+ five claims against one live page:
42
+
43
+ | claim | before | after |
44
+ |---|---|---|
45
+ | 3% Daily Cash at Apple | supported | supported |
46
+ | **10% on every purchase** | **cant_tell** | **not_supported** |
47
+ | works with Windows PCs | cant_tell | cant_tell |
48
+ | 2% with Apple Pay | — | supported |
49
+ | no annual fee | — | supported |
50
+
51
+ The last two are over-correction checks. The contradiction guard did not
52
+ downgrade the 10% verdict, so it arrived with a verbatim quote that passed the
53
+ contiguous-run check — refused with evidence, not merely refused.
54
+
55
+ ## 0.6.0 and earlier
56
+
57
+ Not recorded here; see the git history.
package/dist/support.d.ts CHANGED
@@ -87,6 +87,20 @@ export interface SupportStageOptions {
87
87
  /**
88
88
  * The shipped judge prompt.
89
89
  *
90
+ * The "different value" clause was added 2026-09-11 after a measured failure:
91
+ * asked whether apple.com/apple-card supports "Apple Card gives 10% Daily Cash",
92
+ * the judge answered cant_tell, reasoning "the source states 2%... 3%... and 1%,
93
+ * but it does not mention a 10% Daily Cash rate". It had read every rate on the
94
+ * page and still treated the absence of the claimed number as the claim being
95
+ * unaddressed. Nothing on that page denies 10% in words, so the original
96
+ * wording gave it nowhere else to land.
97
+ *
98
+ * That is the common shape of a false claim in the wild — a wrong number, not
99
+ * an explicit denial — so a checker that goes quiet on it is quiet exactly when
100
+ * it is most needed. The compare-like-with-like line ships alongside because
101
+ * the obvious over-correction is ruling not_supported on a page that simply
102
+ * lists several values for different cases.
103
+ *
90
104
  * The line about qualification is load-bearing rather than decorative.
91
105
  * Measured 2026-09-04 without it: adding two lines to a source that never
92
106
  * mention the claim flipped a verdict from supported to not_supported — three
@@ -94,7 +108,7 @@ export interface SupportStageOptions {
94
108
  * model stayed stable. A package promising engine-agnostic verification has to
95
109
  * survive the weaker engine, so the instruction ships by default.
96
110
  */
97
- export declare const SUPPORT_SYSTEM = "You are a strict fact-check judge. Decide whether the SOURCE supports the CLAIM using ONLY the source text \u2014 no outside knowledge, no charitable guessing.\nVerdicts:\n- \"supported\": the source affirmatively supports the claim.\n- \"not_supported\": the source contradicts the claim or asserts something incompatible with it.\n- \"cant_tell\": the source does not address the claim, or addresses it only partially. Silence is NOT support.\nA qualification is not a contradiction. If the source substantially supports the claim but adds an exception, a carve-out or a condition, it has NOT said otherwise \u2014 do not rule not_supported. Reserve not_supported for a source that asserts something the claim cannot be true alongside.\nTo rule \"not_supported\" you MUST fill \"contradiction\" with the exact sentence from the source that says otherwise, copied verbatim. If no such sentence exists, you may not use that verdict.\nReturn STRICT JSON only:\n{\"verdict\":\"supported\"|\"not_supported\"|\"cant_tell\",\"reasoning\":\"<one or two plain sentences>\",\"evidence\":\"<short verbatim quote from the source that decided it, or null>\",\"contradiction\":\"<verbatim sentence that contradicts the claim, or null>\"}";
111
+ export declare const SUPPORT_SYSTEM = "You are a strict fact-check judge. Decide whether the SOURCE supports the CLAIM using ONLY the source text \u2014 no outside knowledge, no charitable guessing.\nVerdicts:\n- \"supported\": the source affirmatively supports the claim.\n- \"not_supported\": the source contradicts the claim or asserts something incompatible with it. This INCLUDES the source stating a DIFFERENT VALUE for the same thing the claim quantifies \u2014 a rate, price, date, count, duration or name. If the claim says 10% and the source says the rate is 3%, the source has contradicted it; it does not have to mention 10% to do so.\n- \"cant_tell\": the source never addresses the subject of the claim at all, or addresses it only partially. A source that states its own value for the very thing the claim asserts HAS addressed it \u2014 that is not_supported, not cant_tell. Silence is NOT support.\nA qualification is not a contradiction. If the source substantially supports the claim but adds an exception, a carve-out or a condition, it has NOT said otherwise \u2014 do not rule not_supported. Reserve not_supported for a source that asserts something the claim cannot be true alongside.\nTo rule \"not_supported\" you MUST fill \"contradiction\" with the exact sentence from the source that says otherwise, copied verbatim. Where the conflict is a differing value, that sentence is the one stating the SOURCE's own value. If no such sentence exists, you may not use that verdict.\nCompare like with like: a different value only contradicts when it describes the same thing under the same conditions. A source listing several values for different cases has not contradicted a claim that matches one of them.\nReturn STRICT JSON only:\n{\"verdict\":\"supported\"|\"not_supported\"|\"cant_tell\",\"reasoning\":\"<one or two plain sentences>\",\"evidence\":\"<short verbatim quote from the source that decided it, or null>\",\"contradiction\":\"<verbatim sentence that contradicts the claim, or null>\"}";
98
112
  /** JSON Schema for the judgement, for providers that constrain decoding. */
99
113
  export declare const SUPPORT_SCHEMA: {
100
114
  readonly type: "object";
package/dist/support.js CHANGED
@@ -18,6 +18,20 @@
18
18
  /**
19
19
  * The shipped judge prompt.
20
20
  *
21
+ * The "different value" clause was added 2026-09-11 after a measured failure:
22
+ * asked whether apple.com/apple-card supports "Apple Card gives 10% Daily Cash",
23
+ * the judge answered cant_tell, reasoning "the source states 2%... 3%... and 1%,
24
+ * but it does not mention a 10% Daily Cash rate". It had read every rate on the
25
+ * page and still treated the absence of the claimed number as the claim being
26
+ * unaddressed. Nothing on that page denies 10% in words, so the original
27
+ * wording gave it nowhere else to land.
28
+ *
29
+ * That is the common shape of a false claim in the wild — a wrong number, not
30
+ * an explicit denial — so a checker that goes quiet on it is quiet exactly when
31
+ * it is most needed. The compare-like-with-like line ships alongside because
32
+ * the obvious over-correction is ruling not_supported on a page that simply
33
+ * lists several values for different cases.
34
+ *
21
35
  * The line about qualification is load-bearing rather than decorative.
22
36
  * Measured 2026-09-04 without it: adding two lines to a source that never
23
37
  * mention the claim flipped a verdict from supported to not_supported — three
@@ -28,10 +42,11 @@
28
42
  export const SUPPORT_SYSTEM = `You are a strict fact-check judge. Decide whether the SOURCE supports the CLAIM using ONLY the source text — no outside knowledge, no charitable guessing.
29
43
  Verdicts:
30
44
  - "supported": the source affirmatively supports the claim.
31
- - "not_supported": the source contradicts the claim or asserts something incompatible with it.
32
- - "cant_tell": the source does not address the claim, or addresses it only partially. Silence is NOT support.
45
+ - "not_supported": the source contradicts the claim or asserts something incompatible with it. This INCLUDES the source stating a DIFFERENT VALUE for the same thing the claim quantifies — a rate, price, date, count, duration or name. If the claim says 10% and the source says the rate is 3%, the source has contradicted it; it does not have to mention 10% to do so.
46
+ - "cant_tell": the source never addresses the subject of the claim at all, or addresses it only partially. A source that states its own value for the very thing the claim asserts HAS addressed it — that is not_supported, not cant_tell. Silence is NOT support.
33
47
  A qualification is not a contradiction. If the source substantially supports the claim but adds an exception, a carve-out or a condition, it has NOT said otherwise — do not rule not_supported. Reserve not_supported for a source that asserts something the claim cannot be true alongside.
34
- To rule "not_supported" you MUST fill "contradiction" with the exact sentence from the source that says otherwise, copied verbatim. If no such sentence exists, you may not use that verdict.
48
+ To rule "not_supported" you MUST fill "contradiction" with the exact sentence from the source that says otherwise, copied verbatim. Where the conflict is a differing value, that sentence is the one stating the SOURCE's own value. If no such sentence exists, you may not use that verdict.
49
+ Compare like with like: a different value only contradicts when it describes the same thing under the same conditions. A source listing several values for different cases has not contradicted a claim that matches one of them.
35
50
  Return STRICT JSON only:
36
51
  {"verdict":"supported"|"not_supported"|"cant_tell","reasoning":"<one or two plain sentences>","evidence":"<short verbatim quote from the source that decided it, or null>","contradiction":"<verbatim sentence that contradicts the claim, or null>"}`;
37
52
  /** JSON Schema for the judgement, for providers that constrain decoding. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stilltrue",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Your tests check your code. stilltrue checks your facts. CI checks for AI-in-the-loop apps: drift (curated facts vs live sources), golden (regression evals), verify (judge answers against sources).",
5
5
  "keywords": [
6
6
  "drift",
@@ -20,7 +20,8 @@
20
20
  "stilltrue": "dist/cli.js"
21
21
  },
22
22
  "files": [
23
- "dist"
23
+ "dist",
24
+ "CHANGELOG.md"
24
25
  ],
25
26
  "scripts": {
26
27
  "build": "tsc",