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 +57 -0
- package/dist/support.d.ts +15 -1
- package/dist/support.js +18 -3
- package/package.json +3 -2
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
|
|
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
|
|
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.
|
|
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",
|