stilltrue 0.7.1 → 0.8.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 +41 -0
- package/dist/support.d.ts +14 -1
- package/dist/support.js +15 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.0 — 2026-10-28
|
|
4
|
+
|
|
5
|
+
**A list is not a denial.**
|
|
6
|
+
|
|
7
|
+
Asked whether `apple.com/apple-card` supports "Apple Card works with Windows
|
|
8
|
+
PCs", the judge ruled `not_supported`, reasoning:
|
|
9
|
+
|
|
10
|
+
> by listing only Apple devices as having the technology, it implies
|
|
11
|
+
> exclusion of other platforms like Windows.
|
|
12
|
+
|
|
13
|
+
The page never mentions Windows, so the right answer is `cant_tell`. The
|
|
14
|
+
contradiction guard could not catch it, because the quoted sentence was real.
|
|
15
|
+
It was about Apple Pay, though, not Apple Card. Two lines were added to the
|
|
16
|
+
shipped judge prompt:
|
|
17
|
+
|
|
18
|
+
- A source that names the cases something applies to has not ruled out the
|
|
19
|
+
ones it leaves unnamed, unless it says so in words ("only", "not available
|
|
20
|
+
on").
|
|
21
|
+
- A contradicting sentence must be about the same subject as the claim.
|
|
22
|
+
|
|
23
|
+
Measured on qwen3.6-35b-a3b, the weakest engine behind the demo:
|
|
24
|
+
|
|
25
|
+
| Set | 0.7.1 | 0.8.0 |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| Apple: Windows PCs, 3 runs | 0/3 | 3/3 |
|
|
28
|
+
| Apple: 10% Daily Cash, 3 runs | 3/3 | 3/3 |
|
|
29
|
+
| Controls | 4/4 | 4/4 |
|
|
30
|
+
| 21-case comparison set | 21/21 | 21/21 |
|
|
31
|
+
| False supported, all sets | 0 | 0 |
|
|
32
|
+
|
|
33
|
+
The box is not deterministic at temperature 0. On a second sample 0.8.0
|
|
34
|
+
scored 20/21 on the comparison set, missing "Visitors must create an
|
|
35
|
+
account". Rerun five times on each prompt, that case scored 4/5 on 0.7.1
|
|
36
|
+
and 5/5 on 0.8.0, so the miss is run-to-run variance rather than a
|
|
37
|
+
regression.
|
|
38
|
+
|
|
39
|
+
Known gap: two synthetic list cases still come back `not_supported` on that
|
|
40
|
+
model, which reads "issued at Duluth, Norcross and Snellville" as "issued
|
|
41
|
+
only at" them. Generating reasoning before the verdict fixed those two but
|
|
42
|
+
broke the real Apple case 3/3, so that change did not ship.
|
|
43
|
+
|
|
3
44
|
## 0.7.1 — 2026-09-13
|
|
4
45
|
|
|
5
46
|
Docs restructure, no behavior changes except one message:
|
package/dist/support.d.ts
CHANGED
|
@@ -101,6 +101,19 @@ export interface SupportStageOptions {
|
|
|
101
101
|
* the obvious over-correction is ruling not_supported on a page that simply
|
|
102
102
|
* lists several values for different cases.
|
|
103
103
|
*
|
|
104
|
+
* The list and same-subject lines were added 2026-10-28, the mirror image of
|
|
105
|
+
* the 10% failure on the same page. Asked whether apple.com/apple-card supports
|
|
106
|
+
* "Apple Card works with Windows PCs", the judge ruled not_supported, quoting
|
|
107
|
+
* "Apple Pay ... built into iPhone, Apple Watch, iPad, and Mac" and reasoning
|
|
108
|
+
* that listing only Apple devices "implies exclusion". That is an argument from
|
|
109
|
+
* silence, and the quote was about Apple Pay rather than Apple Card. The guard
|
|
110
|
+
* could not catch it, because the quote was real. On qwen3.6-35b-a3b the real
|
|
111
|
+
* case went from 0/3 to 3/3 correct, with no change on the 21-case comparison
|
|
112
|
+
* set, the controls, or the 10% case. Two synthetic list cases ("issued at the
|
|
113
|
+
* Duluth, Norcross and Snellville branches") still fail on that model, which
|
|
114
|
+
* reads a plain list as "only" these. Putting reasoning ahead of the verdict
|
|
115
|
+
* fixed those and broke the real Apple case 3/3, so it did not ship.
|
|
116
|
+
*
|
|
104
117
|
* The line about qualification is load-bearing rather than decorative.
|
|
105
118
|
* Measured 2026-09-04 without it: adding two lines to a source that never
|
|
106
119
|
* mention the claim flipped a verdict from supported to not_supported — three
|
|
@@ -108,7 +121,7 @@ export interface SupportStageOptions {
|
|
|
108
121
|
* model stayed stable. A package promising engine-agnostic verification has to
|
|
109
122
|
* survive the weaker engine, so the instruction ships by default.
|
|
110
123
|
*/
|
|
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>\"}";
|
|
124
|
+
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.\nA list is not a denial. A source that names the devices, places, people or cases something applies to has NOT ruled out the ones it leaves unnamed, unless it says so in words \u2014 \"only\", \"exclusively\", \"not available on\", \"does not work with\". Absence from a list is silence, and silence is cant_tell.\nThe contradicting sentence must be about the same subject as the claim. A sentence about a different product, service or program does not contradict it.\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>\"}";
|
|
112
125
|
/** JSON Schema for the judgement, for providers that constrain decoding. */
|
|
113
126
|
export declare const SUPPORT_SCHEMA: {
|
|
114
127
|
readonly type: "object";
|
package/dist/support.js
CHANGED
|
@@ -32,6 +32,19 @@
|
|
|
32
32
|
* the obvious over-correction is ruling not_supported on a page that simply
|
|
33
33
|
* lists several values for different cases.
|
|
34
34
|
*
|
|
35
|
+
* The list and same-subject lines were added 2026-10-28, the mirror image of
|
|
36
|
+
* the 10% failure on the same page. Asked whether apple.com/apple-card supports
|
|
37
|
+
* "Apple Card works with Windows PCs", the judge ruled not_supported, quoting
|
|
38
|
+
* "Apple Pay ... built into iPhone, Apple Watch, iPad, and Mac" and reasoning
|
|
39
|
+
* that listing only Apple devices "implies exclusion". That is an argument from
|
|
40
|
+
* silence, and the quote was about Apple Pay rather than Apple Card. The guard
|
|
41
|
+
* could not catch it, because the quote was real. On qwen3.6-35b-a3b the real
|
|
42
|
+
* case went from 0/3 to 3/3 correct, with no change on the 21-case comparison
|
|
43
|
+
* set, the controls, or the 10% case. Two synthetic list cases ("issued at the
|
|
44
|
+
* Duluth, Norcross and Snellville branches") still fail on that model, which
|
|
45
|
+
* reads a plain list as "only" these. Putting reasoning ahead of the verdict
|
|
46
|
+
* fixed those and broke the real Apple case 3/3, so it did not ship.
|
|
47
|
+
*
|
|
35
48
|
* The line about qualification is load-bearing rather than decorative.
|
|
36
49
|
* Measured 2026-09-04 without it: adding two lines to a source that never
|
|
37
50
|
* mention the claim flipped a verdict from supported to not_supported — three
|
|
@@ -47,6 +60,8 @@ Verdicts:
|
|
|
47
60
|
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.
|
|
48
61
|
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
62
|
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.
|
|
63
|
+
A list is not a denial. A source that names the devices, places, people or cases something applies to has NOT ruled out the ones it leaves unnamed, unless it says so in words — "only", "exclusively", "not available on", "does not work with". Absence from a list is silence, and silence is cant_tell.
|
|
64
|
+
The contradicting sentence must be about the same subject as the claim. A sentence about a different product, service or program does not contradict it.
|
|
50
65
|
Return STRICT JSON only:
|
|
51
66
|
{"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>"}`;
|
|
52
67
|
/** 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.8.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",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"jiti": "^2.7.0",
|
|
34
|
-
"zod": "^3.23.0"
|
|
34
|
+
"zod": "^3.23.0 || ^4.0.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "^22.0.0",
|