tryassay 0.21.2 → 0.22.1
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/demo/.claude/.truth_last_prompt +1 -0
- package/demo/.claude/truth_status +1 -0
- package/demo/css/style.css +840 -0
- package/demo/index.html +78 -0
- package/demo/js/chat.js +535 -0
- package/demo/js/code-panel.js +206 -0
- package/demo/js/preview.js +456 -0
- package/demo/js/sse-client.js +600 -0
- package/demo/js/state.js +172 -0
- package/demo/js/timeline.js +80 -0
- package/dist/api/server.d.ts +3 -0
- package/dist/api/server.js +127 -20
- package/dist/api/server.js.map +1 -1
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/assess.d.ts +2 -0
- package/dist/commands/assess.js +132 -164
- package/dist/commands/assess.js.map +1 -1
- package/dist/commands/demo.d.ts +5 -0
- package/dist/commands/demo.js +357 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-quick-test.d.ts +6 -0
- package/dist/lib/__tests__/arithmetic-quick-test.js +197 -0
- package/dist/lib/__tests__/arithmetic-quick-test.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.d.ts +13 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.js +284 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-value-demo.d.ts +10 -0
- package/dist/lib/__tests__/arithmetic-value-demo.js +193 -0
- package/dist/lib/__tests__/arithmetic-value-demo.js.map +1 -0
- package/dist/lib/__tests__/flow-to-claims.test.d.ts +1 -0
- package/dist/lib/__tests__/flow-to-claims.test.js +91 -0
- package/dist/lib/__tests__/flow-to-claims.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.d.ts +9 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.js +391 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.d.ts +7 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.js +318 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.js.map +1 -0
- package/dist/lib/__tests__/intent-extractor.test.d.ts +1 -0
- package/dist/lib/__tests__/intent-extractor.test.js +97 -0
- package/dist/lib/__tests__/intent-extractor.test.js.map +1 -0
- package/dist/lib/__tests__/intent-reviewer.test.d.ts +1 -0
- package/dist/lib/__tests__/intent-reviewer.test.js +55 -0
- package/dist/lib/__tests__/intent-reviewer.test.js.map +1 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.d.ts +11 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js +224 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js.map +1 -0
- package/dist/lib/anthropic.js +25 -33
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/assessment-reporter.js +9 -13
- package/dist/lib/assessment-reporter.js.map +1 -1
- package/dist/lib/claim-extractor.js +10 -19
- package/dist/lib/claim-extractor.js.map +1 -1
- package/dist/lib/code-verifier.js +16 -36
- package/dist/lib/code-verifier.js.map +1 -1
- package/dist/lib/constraint-engine.js +10 -19
- package/dist/lib/constraint-engine.js.map +1 -1
- package/dist/lib/formal-verifier.d.ts +1 -1
- package/dist/lib/formal-verifier.js +454 -0
- package/dist/lib/formal-verifier.js.map +1 -1
- package/dist/lib/guided-generator.js +19 -37
- package/dist/lib/guided-generator.js.map +1 -1
- package/dist/lib/intent-extractor.d.ts +47 -0
- package/dist/lib/intent-extractor.js +427 -0
- package/dist/lib/intent-extractor.js.map +1 -0
- package/dist/lib/intent-reviewer.d.ts +14 -0
- package/dist/lib/intent-reviewer.js +148 -0
- package/dist/lib/intent-reviewer.js.map +1 -0
- package/dist/lib/intent-types.d.ts +89 -0
- package/dist/lib/intent-types.js +5 -0
- package/dist/lib/intent-types.js.map +1 -0
- package/dist/lib/inventory-extractor.js +9 -22
- package/dist/lib/inventory-extractor.js.map +1 -1
- package/dist/lib/llm-provider.d.ts +23 -0
- package/dist/lib/llm-provider.js +130 -0
- package/dist/lib/llm-provider.js.map +1 -0
- package/dist/lib/remediator.js +20 -28
- package/dist/lib/remediator.js.map +1 -1
- package/dist/lib/requirements-generator.js +14 -19
- package/dist/lib/requirements-generator.js.map +1 -1
- package/dist/lib/spec-synthesizer.js +10 -19
- package/dist/lib/spec-synthesizer.js.map +1 -1
- package/dist/runtime/agents/planner-agent.d.ts +5 -2
- package/dist/runtime/agents/planner-agent.js +232 -1
- package/dist/runtime/agents/planner-agent.js.map +1 -1
- package/dist/runtime/app-create-orchestrator.d.ts +9 -1
- package/dist/runtime/app-create-orchestrator.js +265 -87
- package/dist/runtime/app-create-orchestrator.js.map +1 -1
- package/dist/runtime/check-catalog.js +5 -3
- package/dist/runtime/check-catalog.js.map +1 -1
- package/dist/runtime/check-definitions.d.ts +10 -0
- package/dist/runtime/check-definitions.js +52 -2
- package/dist/runtime/check-definitions.js.map +1 -1
- package/dist/runtime/composition-verifier.js +8 -12
- package/dist/runtime/composition-verifier.js.map +1 -1
- package/dist/runtime/gap-detector.js +8 -10
- package/dist/runtime/gap-detector.js.map +1 -1
- package/dist/runtime/input-validator.d.ts +7 -0
- package/dist/runtime/input-validator.js +162 -0
- package/dist/runtime/input-validator.js.map +1 -0
- package/dist/runtime/model-router.d.ts +10 -0
- package/dist/runtime/model-router.js +42 -0
- package/dist/runtime/model-router.js.map +1 -0
- package/dist/runtime/pattern-extractor.js +8 -10
- package/dist/runtime/pattern-extractor.js.map +1 -1
- package/dist/runtime/planner.js +11 -16
- package/dist/runtime/planner.js.map +1 -1
- package/dist/runtime/prompt-guard.d.ts +2 -0
- package/dist/runtime/prompt-guard.js +180 -0
- package/dist/runtime/prompt-guard.js.map +1 -0
- package/dist/runtime/prompt-safety-analyzer.js +8 -13
- package/dist/runtime/prompt-safety-analyzer.js.map +1 -1
- package/dist/runtime/reasoner.js +19 -33
- package/dist/runtime/reasoner.js.map +1 -1
- package/dist/runtime/rule-meta-verifier.js +9 -11
- package/dist/runtime/rule-meta-verifier.js.map +1 -1
- package/dist/runtime/safe-executor.d.ts +23 -0
- package/dist/runtime/safe-executor.js +151 -0
- package/dist/runtime/safe-executor.js.map +1 -0
- package/dist/runtime/specialized-agent.js +10 -14
- package/dist/runtime/specialized-agent.js.map +1 -1
- package/dist/runtime/strategy-library.js +8 -10
- package/dist/runtime/strategy-library.js.map +1 -1
- package/dist/runtime/supabase-experience-store.js.map +1 -1
- package/dist/runtime/supabase-provisioner.d.ts +35 -0
- package/dist/runtime/supabase-provisioner.js +192 -0
- package/dist/runtime/supabase-provisioner.js.map +1 -0
- package/dist/runtime/types.d.ts +116 -0
- package/dist/sdk/forward-verify.js +16 -33
- package/dist/sdk/forward-verify.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Misuse & Undefined Reference Tests — two new formal check types.
|
|
3
|
+
*
|
|
4
|
+
* Tests for:
|
|
5
|
+
* - checkApiMisuse: detects known non-existent API calls (LLM hallucinations)
|
|
6
|
+
* - checkUndefinedReference: detects references to undeclared identifiers
|
|
7
|
+
* - classifyClaim: correct routing to new check types
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect } from 'vitest';
|
|
10
|
+
import { runFormalVerification } from '../formal-verifier.js';
|
|
11
|
+
function makeClaim(overrides = {}) {
|
|
12
|
+
return {
|
|
13
|
+
id: 'test-claim-1',
|
|
14
|
+
category: 'correctness',
|
|
15
|
+
severity: 'medium',
|
|
16
|
+
description: overrides.description ?? 'test claim',
|
|
17
|
+
assertion: overrides.assertion ?? 'test assertion',
|
|
18
|
+
...overrides,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function makeLLMVerification(claimId, verdict = 'PASS') {
|
|
22
|
+
return {
|
|
23
|
+
claimId,
|
|
24
|
+
verdict,
|
|
25
|
+
reasoning: 'LLM says it looks correct',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// ── classifyClaim Tests ──────────────────────────────────────
|
|
29
|
+
describe('classifyClaim — api_misuse classification', () => {
|
|
30
|
+
it('classifies "uses method array.flatten" as api_misuse', () => {
|
|
31
|
+
const claim = makeClaim({
|
|
32
|
+
description: 'uses method array.flatten to flatten nested arrays',
|
|
33
|
+
assertion: 'calls array.flatten()',
|
|
34
|
+
});
|
|
35
|
+
const llmV = makeLLMVerification(claim.id);
|
|
36
|
+
const { verifications } = runFormalVerification('const flat = arr.flat();', 'typescript', [claim], [llmV]);
|
|
37
|
+
expect(verifications[0].verification_method).toBe('formal');
|
|
38
|
+
});
|
|
39
|
+
it('classifies "calls Object.fromPairs" as api_misuse', () => {
|
|
40
|
+
const claim = makeClaim({
|
|
41
|
+
description: 'calls Object.fromPairs to convert pairs to object',
|
|
42
|
+
assertion: 'uses Object.fromPairs()',
|
|
43
|
+
});
|
|
44
|
+
const llmV = makeLLMVerification(claim.id);
|
|
45
|
+
const { verifications } = runFormalVerification('const obj = Object.fromEntries(pairs);', 'typescript', [claim], [llmV]);
|
|
46
|
+
expect(verifications[0].verification_method).toBe('formal');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('classifyClaim — undefined_reference classification', () => {
|
|
50
|
+
it('classifies "references variable myHelper" as undefined_reference', () => {
|
|
51
|
+
const claim = makeClaim({
|
|
52
|
+
description: 'references variable myHelper for processing',
|
|
53
|
+
assertion: 'myHelper is used correctly',
|
|
54
|
+
});
|
|
55
|
+
const llmV = makeLLMVerification(claim.id);
|
|
56
|
+
const { verifications } = runFormalVerification('const a = 1;\nconst b = 2;\nconst c = 3;\nconst d = myHelper(a);', 'typescript', [claim], [llmV]);
|
|
57
|
+
expect(verifications[0].verification_method).toBe('formal');
|
|
58
|
+
});
|
|
59
|
+
it('classifies "function processData is defined" as undefined_reference', () => {
|
|
60
|
+
const claim = makeClaim({
|
|
61
|
+
description: 'function processData is defined and available',
|
|
62
|
+
assertion: 'processData exists',
|
|
63
|
+
});
|
|
64
|
+
const llmV = makeLLMVerification(claim.id);
|
|
65
|
+
const { verifications } = runFormalVerification('function processData(x: number) { return x * 2; }\nconst a = 1;\nconst b = 2;\nconst c = 3;', 'typescript', [claim], [llmV]);
|
|
66
|
+
expect(verifications[0].verification_method).toBe('formal');
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('classifyClaim — no misclassification of existing types', () => {
|
|
70
|
+
it('arithmetic claims still classified as arithmetic_correctness', () => {
|
|
71
|
+
const claim = makeClaim({
|
|
72
|
+
description: 'calculates 2 + 3 = 5',
|
|
73
|
+
assertion: 'result is 5',
|
|
74
|
+
});
|
|
75
|
+
const llmV = makeLLMVerification(claim.id);
|
|
76
|
+
const { verifications } = runFormalVerification('const result = 2 + 3;', 'typescript', [claim], [llmV]);
|
|
77
|
+
// Should be formally verified (arithmetic_correctness)
|
|
78
|
+
expect(verifications[0].verification_method).toBe('formal');
|
|
79
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
80
|
+
});
|
|
81
|
+
it('error handling claims still classified correctly', () => {
|
|
82
|
+
const claim = makeClaim({
|
|
83
|
+
category: 'error-handling',
|
|
84
|
+
description: 'handles errors with try-catch',
|
|
85
|
+
assertion: 'error handling is present',
|
|
86
|
+
});
|
|
87
|
+
const llmV = makeLLMVerification(claim.id);
|
|
88
|
+
const { verifications } = runFormalVerification('try { doWork(); } catch (e) { console.error(e); }', 'typescript', [claim], [llmV]);
|
|
89
|
+
expect(verifications[0].verification_method).toBe('formal');
|
|
90
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
// ── checkApiMisuse Tests ─────────────────────────────────────
|
|
94
|
+
describe('checkApiMisuse', () => {
|
|
95
|
+
it('FAIL: JS code with .flatten() — should use .flat()', () => {
|
|
96
|
+
const claim = makeClaim({
|
|
97
|
+
description: 'uses method flatten to flatten arrays',
|
|
98
|
+
assertion: 'calls array.flatten()',
|
|
99
|
+
});
|
|
100
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
101
|
+
const { verifications } = runFormalVerification('const result = nestedArray.flatten();', 'typescript', [claim], [llmV]);
|
|
102
|
+
expect(verifications[0].verdict).toBe('FAIL');
|
|
103
|
+
expect(verifications[0].evidence).toContain('.flat(');
|
|
104
|
+
});
|
|
105
|
+
it('PASS: JS code with .flat() — correct API', () => {
|
|
106
|
+
const claim = makeClaim({
|
|
107
|
+
description: 'uses method flat to flatten arrays',
|
|
108
|
+
assertion: 'calls array.flat()',
|
|
109
|
+
});
|
|
110
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
111
|
+
const { verifications } = runFormalVerification('const result = nestedArray.flat();', 'typescript', [claim], [llmV]);
|
|
112
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
113
|
+
});
|
|
114
|
+
it('FAIL: JS code with .contains() — should use .includes()', () => {
|
|
115
|
+
const claim = makeClaim({
|
|
116
|
+
description: 'uses method contains to check membership',
|
|
117
|
+
assertion: 'calls array.contains()',
|
|
118
|
+
});
|
|
119
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
120
|
+
const { verifications } = runFormalVerification('if (items.contains("apple")) { return true; }', 'javascript', [claim], [llmV]);
|
|
121
|
+
expect(verifications[0].verdict).toBe('FAIL');
|
|
122
|
+
expect(verifications[0].evidence).toContain('.includes(');
|
|
123
|
+
});
|
|
124
|
+
it('PASS: JS code with .includes() — correct API', () => {
|
|
125
|
+
const claim = makeClaim({
|
|
126
|
+
description: 'uses method includes to check membership',
|
|
127
|
+
assertion: 'calls array.includes()',
|
|
128
|
+
});
|
|
129
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
130
|
+
const { verifications } = runFormalVerification('if (items.includes("apple")) { return true; }', 'javascript', [claim], [llmV]);
|
|
131
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
132
|
+
});
|
|
133
|
+
it('FAIL: Python code with dict.has_key() — should use "in"', () => {
|
|
134
|
+
const claim = makeClaim({
|
|
135
|
+
description: 'uses method has_key to check dictionary',
|
|
136
|
+
assertion: 'calls dict.has_key()',
|
|
137
|
+
});
|
|
138
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
139
|
+
const { verifications } = runFormalVerification('if config.has_key("debug"):\n enable_debug()', 'python', [claim], [llmV]);
|
|
140
|
+
expect(verifications[0].verdict).toBe('FAIL');
|
|
141
|
+
expect(verifications[0].evidence).toContain('in');
|
|
142
|
+
});
|
|
143
|
+
it('PASS: Python code with "key in dict" — correct pattern', () => {
|
|
144
|
+
const claim = makeClaim({
|
|
145
|
+
description: 'uses method to check dictionary key',
|
|
146
|
+
assertion: 'calls dict lookup',
|
|
147
|
+
});
|
|
148
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
149
|
+
const { verifications } = runFormalVerification('if "debug" in config:\n enable_debug()', 'python', [claim], [llmV]);
|
|
150
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
151
|
+
});
|
|
152
|
+
it('PASS: Java code with .contains() — valid in Java', () => {
|
|
153
|
+
const claim = makeClaim({
|
|
154
|
+
description: 'uses method contains for list check',
|
|
155
|
+
assertion: 'calls list.contains()',
|
|
156
|
+
});
|
|
157
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
158
|
+
const { verifications } = runFormalVerification('if (items.contains("apple")) { return true; }', 'java', [claim], [llmV]);
|
|
159
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
160
|
+
});
|
|
161
|
+
it('PASS: bad API in comment (preprocessed away)', () => {
|
|
162
|
+
const claim = makeClaim({
|
|
163
|
+
description: 'uses method flatten for arrays',
|
|
164
|
+
assertion: 'calls flatten API',
|
|
165
|
+
});
|
|
166
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
167
|
+
const { verifications } = runFormalVerification('// Use .flatten() to flatten\nconst result = arr.flat();', 'typescript', [claim], [llmV]);
|
|
168
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
169
|
+
});
|
|
170
|
+
it('PASS: code with no API calls', () => {
|
|
171
|
+
const claim = makeClaim({
|
|
172
|
+
description: 'uses method for processing',
|
|
173
|
+
assertion: 'calls the processing function',
|
|
174
|
+
});
|
|
175
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
176
|
+
const { verifications } = runFormalVerification('const x = 42;\nconst y = x + 1;', 'typescript', [claim], [llmV]);
|
|
177
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
178
|
+
});
|
|
179
|
+
it('formal override: LLM says PASS on .flatten(), formal overrides to FAIL', () => {
|
|
180
|
+
const claim = makeClaim({
|
|
181
|
+
description: 'uses method flatten to flatten arrays',
|
|
182
|
+
assertion: 'calls array.flatten()',
|
|
183
|
+
});
|
|
184
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
185
|
+
const { verifications, stats } = runFormalVerification('const result = data.flatten();', 'typescript', [claim], [llmV]);
|
|
186
|
+
expect(verifications[0].verdict).toBe('FAIL');
|
|
187
|
+
expect(verifications[0].formal_override).toBeDefined();
|
|
188
|
+
expect(verifications[0].formal_override?.original_llm_verdict).toBe('PASS');
|
|
189
|
+
expect(verifications[0].formal_override?.formal_verdict).toBe('FAIL');
|
|
190
|
+
expect(stats.formal_overrides).toBe(1);
|
|
191
|
+
});
|
|
192
|
+
it('FAIL: JS code with Object.fromPairs()', () => {
|
|
193
|
+
const claim = makeClaim({
|
|
194
|
+
description: 'uses method Object.fromPairs to create object',
|
|
195
|
+
assertion: 'calls Object.fromPairs()',
|
|
196
|
+
});
|
|
197
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
198
|
+
const { verifications } = runFormalVerification('const obj = Object.fromPairs(entries);', 'typescript', [claim], [llmV]);
|
|
199
|
+
expect(verifications[0].verdict).toBe('FAIL');
|
|
200
|
+
expect(verifications[0].evidence).toContain('Object.fromEntries(');
|
|
201
|
+
});
|
|
202
|
+
it('FAIL: bad API inside string literal is NOT flagged (preprocessed)', () => {
|
|
203
|
+
const claim = makeClaim({
|
|
204
|
+
description: 'uses method flatten for processing',
|
|
205
|
+
assertion: 'calls array.flatten()',
|
|
206
|
+
});
|
|
207
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
208
|
+
const { verifications } = runFormalVerification('const msg = "Use .flatten() for this";\nconst result = arr.flat();', 'typescript', [claim], [llmV]);
|
|
209
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
// ── checkUndefinedReference Tests ────────────────────────────
|
|
213
|
+
describe('checkUndefinedReference', () => {
|
|
214
|
+
it('PASS: reference to declared variable', () => {
|
|
215
|
+
const claim = makeClaim({
|
|
216
|
+
description: 'references variable processData for computation',
|
|
217
|
+
assertion: 'processData is used',
|
|
218
|
+
});
|
|
219
|
+
const llmV = makeLLMVerification(claim.id);
|
|
220
|
+
const code = `
|
|
221
|
+
const processData = (x: number) => x * 2;
|
|
222
|
+
const input = 5;
|
|
223
|
+
const output = processData(input);
|
|
224
|
+
const formatted = String(output);
|
|
225
|
+
`;
|
|
226
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
227
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
228
|
+
expect(verifications[0].reasoning).toContain('declared');
|
|
229
|
+
});
|
|
230
|
+
it('FAIL: reference to undeclared variable', () => {
|
|
231
|
+
const claim = makeClaim({
|
|
232
|
+
description: 'references variable helperUtil for processing',
|
|
233
|
+
assertion: 'helperUtil is used',
|
|
234
|
+
});
|
|
235
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
236
|
+
const code = `
|
|
237
|
+
const processData = (x: number) => x * 2;
|
|
238
|
+
const input = 5;
|
|
239
|
+
const output = processData(input);
|
|
240
|
+
const formatted = String(output);
|
|
241
|
+
`;
|
|
242
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
243
|
+
expect(verifications[0].verdict).toBe('FAIL');
|
|
244
|
+
expect(verifications[0].evidence).toContain('helperUtil');
|
|
245
|
+
});
|
|
246
|
+
it('PASS: reference to JS builtin (console)', () => {
|
|
247
|
+
const claim = makeClaim({
|
|
248
|
+
description: 'references variable console for logging',
|
|
249
|
+
assertion: 'console is available',
|
|
250
|
+
});
|
|
251
|
+
const llmV = makeLLMVerification(claim.id);
|
|
252
|
+
const code = `
|
|
253
|
+
const a = 1;
|
|
254
|
+
const b = 2;
|
|
255
|
+
const c = a + b;
|
|
256
|
+
console.log(c);
|
|
257
|
+
`;
|
|
258
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
259
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
260
|
+
expect(verifications[0].reasoning).toContain('built-in');
|
|
261
|
+
});
|
|
262
|
+
it('PASS: reference to JS builtin (Math)', () => {
|
|
263
|
+
const claim = makeClaim({
|
|
264
|
+
description: 'references variable Math for calculations',
|
|
265
|
+
assertion: 'Math is used',
|
|
266
|
+
});
|
|
267
|
+
const llmV = makeLLMVerification(claim.id);
|
|
268
|
+
const code = `
|
|
269
|
+
const x = 4;
|
|
270
|
+
const y = 9;
|
|
271
|
+
const z = Math.sqrt(y);
|
|
272
|
+
const result = x + z;
|
|
273
|
+
`;
|
|
274
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
275
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
276
|
+
expect(verifications[0].reasoning).toContain('built-in');
|
|
277
|
+
});
|
|
278
|
+
it('PASS: reference to Python builtin (len)', () => {
|
|
279
|
+
const claim = makeClaim({
|
|
280
|
+
description: 'references variable len for size',
|
|
281
|
+
assertion: 'len is used',
|
|
282
|
+
});
|
|
283
|
+
const llmV = makeLLMVerification(claim.id);
|
|
284
|
+
const code = `
|
|
285
|
+
data = [1, 2, 3]
|
|
286
|
+
count = len(data)
|
|
287
|
+
result = count * 2
|
|
288
|
+
output = str(result)
|
|
289
|
+
`;
|
|
290
|
+
const { verifications } = runFormalVerification(code, 'python', [claim], [llmV]);
|
|
291
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
292
|
+
expect(verifications[0].reasoning).toContain('built-in');
|
|
293
|
+
});
|
|
294
|
+
it('PASS: reference to imported name', () => {
|
|
295
|
+
const claim = makeClaim({
|
|
296
|
+
description: 'references variable axios for HTTP calls',
|
|
297
|
+
assertion: 'axios is used',
|
|
298
|
+
});
|
|
299
|
+
const llmV = makeLLMVerification(claim.id);
|
|
300
|
+
const code = [
|
|
301
|
+
"import axios from 'axios';",
|
|
302
|
+
"const baseUrl = 'https://api.example.com';",
|
|
303
|
+
"const client = axios.create({ baseURL: baseUrl });",
|
|
304
|
+
"const result = client.get('/data');",
|
|
305
|
+
"const status = result.status;",
|
|
306
|
+
].join('\n');
|
|
307
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
308
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
309
|
+
expect(verifications[0].reasoning).toContain('declared');
|
|
310
|
+
});
|
|
311
|
+
it('PASS: code fragment (< 3 declarations) — benefit of doubt', () => {
|
|
312
|
+
const claim = makeClaim({
|
|
313
|
+
description: 'references variable myFunc for computation',
|
|
314
|
+
assertion: 'myFunc is available',
|
|
315
|
+
});
|
|
316
|
+
const llmV = makeLLMVerification(claim.id);
|
|
317
|
+
const code = 'const x = myFunc(42);';
|
|
318
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
319
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
320
|
+
expect(verifications[0].reasoning).toContain('fragment');
|
|
321
|
+
});
|
|
322
|
+
it('PASS: claim without specific identifier — defer to LLM', () => {
|
|
323
|
+
const claim = makeClaim({
|
|
324
|
+
description: 'the code has proper variable declarations',
|
|
325
|
+
assertion: 'variables are well-defined',
|
|
326
|
+
});
|
|
327
|
+
const llmV = makeLLMVerification(claim.id);
|
|
328
|
+
const code = `
|
|
329
|
+
const a = 1;
|
|
330
|
+
const b = 2;
|
|
331
|
+
const c = a + b;
|
|
332
|
+
const d = c * 2;
|
|
333
|
+
`;
|
|
334
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
335
|
+
// This claim doesn't trigger undefined_reference classification,
|
|
336
|
+
// so it should stay as LLM-only
|
|
337
|
+
expect(verifications[0].verification_method).toBe('llm');
|
|
338
|
+
});
|
|
339
|
+
it('PASS: function parameter referenced', () => {
|
|
340
|
+
const claim = makeClaim({
|
|
341
|
+
description: 'references variable callback for async handling',
|
|
342
|
+
assertion: 'callback is used',
|
|
343
|
+
});
|
|
344
|
+
const llmV = makeLLMVerification(claim.id);
|
|
345
|
+
const code = `
|
|
346
|
+
function processItems(items: string[], callback: Function) {
|
|
347
|
+
const results = items.map(callback);
|
|
348
|
+
const count = results.length;
|
|
349
|
+
return { results, count };
|
|
350
|
+
}
|
|
351
|
+
`;
|
|
352
|
+
const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
353
|
+
// callback is a parameter, should be in declarations
|
|
354
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
355
|
+
});
|
|
356
|
+
it('formal override: LLM says PASS on undefined reference, formal overrides to FAIL', () => {
|
|
357
|
+
const claim = makeClaim({
|
|
358
|
+
description: 'references variable missingHelper for data transformation',
|
|
359
|
+
assertion: 'missingHelper is used correctly',
|
|
360
|
+
});
|
|
361
|
+
const llmV = makeLLMVerification(claim.id, 'PASS');
|
|
362
|
+
const code = `
|
|
363
|
+
const data = [1, 2, 3];
|
|
364
|
+
const result = missingHelper(data);
|
|
365
|
+
const output = result.toString();
|
|
366
|
+
const formatted = output.trim();
|
|
367
|
+
`;
|
|
368
|
+
const { verifications, stats } = runFormalVerification(code, 'typescript', [claim], [llmV]);
|
|
369
|
+
expect(verifications[0].verdict).toBe('FAIL');
|
|
370
|
+
expect(verifications[0].formal_override).toBeDefined();
|
|
371
|
+
expect(verifications[0].formal_override?.original_llm_verdict).toBe('PASS');
|
|
372
|
+
expect(stats.formal_overrides).toBe(1);
|
|
373
|
+
});
|
|
374
|
+
it('PASS: Python from...import name', () => {
|
|
375
|
+
const claim = makeClaim({
|
|
376
|
+
description: 'references variable Path for file operations',
|
|
377
|
+
assertion: 'Path is available',
|
|
378
|
+
});
|
|
379
|
+
const llmV = makeLLMVerification(claim.id);
|
|
380
|
+
const code = `
|
|
381
|
+
from pathlib import Path
|
|
382
|
+
data_dir = Path("/data")
|
|
383
|
+
config = data_dir / "config.json"
|
|
384
|
+
result = config.read_text()
|
|
385
|
+
`;
|
|
386
|
+
const { verifications } = runFormalVerification(code, 'python', [claim], [llmV]);
|
|
387
|
+
expect(verifications[0].verdict).toBe('PASS');
|
|
388
|
+
expect(verifications[0].reasoning).toContain('declared');
|
|
389
|
+
});
|
|
390
|
+
});
|
|
391
|
+
//# sourceMappingURL=formal-verifier-api-misuse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formal-verifier-api-misuse.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/formal-verifier-api-misuse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arithmetic Verification Tests — safeEvalArithmetic, classification, and checkArithmeticCorrectness.
|
|
3
|
+
*
|
|
4
|
+
* Tests ported from Aria's safe_eval (aria/domains/math_verify/primitives.py)
|
|
5
|
+
* plus classification and integration tests for the 8th formal check type.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|