tryassay 0.22.0 → 0.22.2

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.
Files changed (130) hide show
  1. package/demo/css/style.css +495 -836
  2. package/demo/index.html +40 -184
  3. package/demo/js/chat.js +385 -142
  4. package/demo/js/preview.js +456 -0
  5. package/demo/js/sse-client.js +262 -135
  6. package/demo/js/state.js +11 -1
  7. package/demo/js/timeline.js +57 -371
  8. package/dist/api/server.d.ts +2 -0
  9. package/dist/api/server.js +63 -19
  10. package/dist/api/server.js.map +1 -1
  11. package/dist/cli.js +2 -0
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/assess.d.ts +2 -0
  14. package/dist/commands/assess.js +132 -164
  15. package/dist/commands/assess.js.map +1 -1
  16. package/dist/commands/demo.js +259 -9
  17. package/dist/commands/demo.js.map +1 -1
  18. package/dist/lib/__tests__/arithmetic-quick-test.d.ts +6 -0
  19. package/dist/lib/__tests__/arithmetic-quick-test.js +197 -0
  20. package/dist/lib/__tests__/arithmetic-quick-test.js.map +1 -0
  21. package/dist/lib/__tests__/arithmetic-real-llm-test.d.ts +13 -0
  22. package/dist/lib/__tests__/arithmetic-real-llm-test.js +284 -0
  23. package/dist/lib/__tests__/arithmetic-real-llm-test.js.map +1 -0
  24. package/dist/lib/__tests__/arithmetic-value-demo.d.ts +10 -0
  25. package/dist/lib/__tests__/arithmetic-value-demo.js +193 -0
  26. package/dist/lib/__tests__/arithmetic-value-demo.js.map +1 -0
  27. package/dist/lib/__tests__/flow-to-claims.test.d.ts +1 -0
  28. package/dist/lib/__tests__/flow-to-claims.test.js +91 -0
  29. package/dist/lib/__tests__/flow-to-claims.test.js.map +1 -0
  30. package/dist/lib/__tests__/formal-verifier-api-misuse.test.d.ts +9 -0
  31. package/dist/lib/__tests__/formal-verifier-api-misuse.test.js +391 -0
  32. package/dist/lib/__tests__/formal-verifier-api-misuse.test.js.map +1 -0
  33. package/dist/lib/__tests__/formal-verifier-arithmetic.test.d.ts +7 -0
  34. package/dist/lib/__tests__/formal-verifier-arithmetic.test.js +318 -0
  35. package/dist/lib/__tests__/formal-verifier-arithmetic.test.js.map +1 -0
  36. package/dist/lib/__tests__/intent-extractor.test.d.ts +1 -0
  37. package/dist/lib/__tests__/intent-extractor.test.js +97 -0
  38. package/dist/lib/__tests__/intent-extractor.test.js.map +1 -0
  39. package/dist/lib/__tests__/intent-reviewer.test.d.ts +1 -0
  40. package/dist/lib/__tests__/intent-reviewer.test.js +55 -0
  41. package/dist/lib/__tests__/intent-reviewer.test.js.map +1 -0
  42. package/dist/lib/__tests__/mr-gsm8k-benchmark.d.ts +11 -0
  43. package/dist/lib/__tests__/mr-gsm8k-benchmark.js +224 -0
  44. package/dist/lib/__tests__/mr-gsm8k-benchmark.js.map +1 -0
  45. package/dist/lib/anthropic.js +25 -33
  46. package/dist/lib/anthropic.js.map +1 -1
  47. package/dist/lib/assessment-reporter.js +9 -13
  48. package/dist/lib/assessment-reporter.js.map +1 -1
  49. package/dist/lib/claim-extractor.js +10 -19
  50. package/dist/lib/claim-extractor.js.map +1 -1
  51. package/dist/lib/code-verifier.js +16 -36
  52. package/dist/lib/code-verifier.js.map +1 -1
  53. package/dist/lib/constraint-engine.js +10 -19
  54. package/dist/lib/constraint-engine.js.map +1 -1
  55. package/dist/lib/formal-verifier.d.ts +1 -1
  56. package/dist/lib/formal-verifier.js +454 -0
  57. package/dist/lib/formal-verifier.js.map +1 -1
  58. package/dist/lib/guided-generator.js +19 -37
  59. package/dist/lib/guided-generator.js.map +1 -1
  60. package/dist/lib/intent-extractor.d.ts +47 -0
  61. package/dist/lib/intent-extractor.js +432 -0
  62. package/dist/lib/intent-extractor.js.map +1 -0
  63. package/dist/lib/intent-reviewer.d.ts +14 -0
  64. package/dist/lib/intent-reviewer.js +148 -0
  65. package/dist/lib/intent-reviewer.js.map +1 -0
  66. package/dist/lib/intent-types.d.ts +89 -0
  67. package/dist/lib/intent-types.js +5 -0
  68. package/dist/lib/intent-types.js.map +1 -0
  69. package/dist/lib/inventory-extractor.js +9 -22
  70. package/dist/lib/inventory-extractor.js.map +1 -1
  71. package/dist/lib/llm-provider.d.ts +23 -0
  72. package/dist/lib/llm-provider.js +130 -0
  73. package/dist/lib/llm-provider.js.map +1 -0
  74. package/dist/lib/remediator.js +20 -28
  75. package/dist/lib/remediator.js.map +1 -1
  76. package/dist/lib/requirements-generator.js +14 -19
  77. package/dist/lib/requirements-generator.js.map +1 -1
  78. package/dist/lib/spec-synthesizer.js +10 -19
  79. package/dist/lib/spec-synthesizer.js.map +1 -1
  80. package/dist/runtime/app-create-orchestrator.d.ts +5 -1
  81. package/dist/runtime/app-create-orchestrator.js +114 -39
  82. package/dist/runtime/app-create-orchestrator.js.map +1 -1
  83. package/dist/runtime/check-catalog.js +5 -3
  84. package/dist/runtime/check-catalog.js.map +1 -1
  85. package/dist/runtime/check-definitions.d.ts +10 -0
  86. package/dist/runtime/check-definitions.js +52 -2
  87. package/dist/runtime/check-definitions.js.map +1 -1
  88. package/dist/runtime/composition-verifier.js +8 -12
  89. package/dist/runtime/composition-verifier.js.map +1 -1
  90. package/dist/runtime/gap-detector.js +8 -10
  91. package/dist/runtime/gap-detector.js.map +1 -1
  92. package/dist/runtime/input-validator.d.ts +7 -0
  93. package/dist/runtime/input-validator.js +162 -0
  94. package/dist/runtime/input-validator.js.map +1 -0
  95. package/dist/runtime/model-router.d.ts +10 -0
  96. package/dist/runtime/model-router.js +42 -0
  97. package/dist/runtime/model-router.js.map +1 -0
  98. package/dist/runtime/pattern-extractor.js +8 -10
  99. package/dist/runtime/pattern-extractor.js.map +1 -1
  100. package/dist/runtime/planner.js +11 -16
  101. package/dist/runtime/planner.js.map +1 -1
  102. package/dist/runtime/prompt-guard.d.ts +2 -0
  103. package/dist/runtime/prompt-guard.js +180 -0
  104. package/dist/runtime/prompt-guard.js.map +1 -0
  105. package/dist/runtime/prompt-safety-analyzer.js +8 -13
  106. package/dist/runtime/prompt-safety-analyzer.js.map +1 -1
  107. package/dist/runtime/reasoner.js +19 -33
  108. package/dist/runtime/reasoner.js.map +1 -1
  109. package/dist/runtime/rule-meta-verifier.js +9 -11
  110. package/dist/runtime/rule-meta-verifier.js.map +1 -1
  111. package/dist/runtime/safe-executor.d.ts +23 -0
  112. package/dist/runtime/safe-executor.js +151 -0
  113. package/dist/runtime/safe-executor.js.map +1 -0
  114. package/dist/runtime/specialized-agent.js +10 -14
  115. package/dist/runtime/specialized-agent.js.map +1 -1
  116. package/dist/runtime/strategy-library.js +8 -10
  117. package/dist/runtime/strategy-library.js.map +1 -1
  118. package/dist/runtime/supabase-experience-store.js.map +1 -1
  119. package/dist/runtime/supabase-provisioner.d.ts +35 -0
  120. package/dist/runtime/supabase-provisioner.js +192 -0
  121. package/dist/runtime/supabase-provisioner.js.map +1 -0
  122. package/dist/runtime/types.d.ts +88 -0
  123. package/dist/sdk/forward-verify.js +16 -33
  124. package/dist/sdk/forward-verify.js.map +1 -1
  125. package/package.json +1 -1
  126. package/demo/data/demo-events.json +0 -103
  127. package/demo/js/demo-mode.js +0 -107
  128. package/demo/js/orb.js +0 -634
  129. package/demo/js/question-cards.js +0 -207
  130. package/demo/js/voice.js +0 -154
@@ -0,0 +1,318 @@
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
+ import { describe, it, expect } from 'vitest';
8
+ import { runFormalVerification } from '../formal-verifier.js';
9
+ // ── Helper: expose safeEvalArithmetic via runFormalVerification ──
10
+ // Since safeEvalArithmetic is module-private, we test it indirectly through
11
+ // the public API by constructing claims that trigger arithmetic_correctness.
12
+ function makeClaim(overrides = {}) {
13
+ return {
14
+ id: 'test-claim-1',
15
+ category: 'correctness',
16
+ severity: 'medium',
17
+ description: overrides.description ?? 'calculates the result',
18
+ assertion: overrides.assertion ?? 'result is correct',
19
+ ...overrides,
20
+ };
21
+ }
22
+ function makeLLMVerification(claimId, verdict = 'PASS') {
23
+ return {
24
+ claimId,
25
+ verdict,
26
+ reasoning: 'LLM says it looks correct',
27
+ };
28
+ }
29
+ // ── safeEvalArithmetic Tests (via claim expression verification) ──
30
+ // We test the parser by putting expressions in claim text as "X = Y" patterns,
31
+ // which triggers the claimExprMatch path in checkArithmeticCorrectness.
32
+ describe('safeEvalArithmetic (via claim expression verification)', () => {
33
+ function evalExpr(expr, expectedResult) {
34
+ const claim = makeClaim({
35
+ description: `calculates ${expr} = ${expectedResult}`,
36
+ assertion: `result is ${expectedResult}`,
37
+ });
38
+ const llmV = makeLLMVerification(claim.id);
39
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
40
+ return { verdict: verifications[0].verdict, evidence: verifications[0].reasoning };
41
+ }
42
+ // Basic operations
43
+ it('addition: 2+3 = 5', () => {
44
+ const r = evalExpr('2+3', 5);
45
+ expect(r.verdict).toBe('PASS');
46
+ });
47
+ it('subtraction: 10-3 = 7', () => {
48
+ const r = evalExpr('10-3', 7);
49
+ expect(r.verdict).toBe('PASS');
50
+ });
51
+ it('multiplication: 2*6 = 12', () => {
52
+ const r = evalExpr('2*6', 12);
53
+ expect(r.verdict).toBe('PASS');
54
+ });
55
+ it('division: 10/4 = 2.5', () => {
56
+ const r = evalExpr('10/4', 2.5);
57
+ expect(r.verdict).toBe('PASS');
58
+ });
59
+ it('floor division: 10//3 = 3', () => {
60
+ const r = evalExpr('10//3', 3);
61
+ expect(r.verdict).toBe('PASS');
62
+ });
63
+ it('modulo: 10%3 = 1', () => {
64
+ const r = evalExpr('10%3', 1);
65
+ expect(r.verdict).toBe('PASS');
66
+ });
67
+ it('power: 2**3 = 8', () => {
68
+ const r = evalExpr('2**3', 8);
69
+ expect(r.verdict).toBe('PASS');
70
+ });
71
+ // Precedence and grouping
72
+ it('parentheses: (2+3)*4 = 20', () => {
73
+ const r = evalExpr('(2+3)*4', 20);
74
+ expect(r.verdict).toBe('PASS');
75
+ });
76
+ it('nested parentheses: ((2+3)*(4-1)) = 15', () => {
77
+ const r = evalExpr('((2+3)*(4-1))', 15);
78
+ expect(r.verdict).toBe('PASS');
79
+ });
80
+ it('precedence: 2+3*4 = 14', () => {
81
+ const r = evalExpr('2+3*4', 14);
82
+ expect(r.verdict).toBe('PASS');
83
+ });
84
+ it('right-associative power: 2**3**2 = 512', () => {
85
+ const r = evalExpr('2**3**2', 512);
86
+ expect(r.verdict).toBe('PASS');
87
+ });
88
+ // Floats
89
+ it('float literal: 3.14 is 3.14', () => {
90
+ const r = evalExpr('3.14', 3.14);
91
+ expect(r.verdict).toBe('PASS');
92
+ });
93
+ // Wrong arithmetic — should FAIL
94
+ it('detects wrong result: 2+3 != 6', () => {
95
+ const r = evalExpr('2+3', 6);
96
+ expect(r.verdict).toBe('FAIL');
97
+ });
98
+ it('detects wrong multiplication: 3*4 != 11', () => {
99
+ const r = evalExpr('3*4', 11);
100
+ expect(r.verdict).toBe('FAIL');
101
+ });
102
+ // Whitespace tolerance
103
+ it('handles whitespace: " 2 + 3 " = 5', () => {
104
+ const r = evalExpr(' 2 + 3 ', 5);
105
+ expect(r.verdict).toBe('PASS');
106
+ });
107
+ });
108
+ // ── safeEvalArithmetic Rejection Tests ──
109
+ // Expressions containing variables/functions/strings should NOT be evaluated,
110
+ // so arithmetic_correctness should PASS (benefit of the doubt, defer to LLM).
111
+ describe('safeEvalArithmetic rejects non-numeric expressions', () => {
112
+ function shouldDefer(claimExpr) {
113
+ const claim = makeClaim({
114
+ description: `calculates ${claimExpr} = 999`,
115
+ assertion: 'result is 999',
116
+ });
117
+ const llmV = makeLLMVerification(claim.id);
118
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
119
+ // Should PASS (benefit of the doubt) because safeEval can't evaluate expressions
120
+ // with variables/functions, so it defers to LLM
121
+ expect(verifications[0].verdict).toBe('PASS');
122
+ }
123
+ it('rejects function calls: Math.floor(3)', () => shouldDefer('Math.floor(3)'));
124
+ it('rejects variables: x+1', () => shouldDefer('x+1'));
125
+ it('rejects strings: "hello"', () => shouldDefer('"hello"'));
126
+ it('rejects arrays: [1,2]', () => shouldDefer('[1,2]'));
127
+ });
128
+ // ── Division by Zero / Error Cases ──
129
+ describe('safeEvalArithmetic error handling', () => {
130
+ it('division by zero → defers to LLM (PASS)', () => {
131
+ const claim = makeClaim({
132
+ description: 'calculates 1/0 = Infinity',
133
+ assertion: 'result is Infinity',
134
+ });
135
+ const llmV = makeLLMVerification(claim.id);
136
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
137
+ expect(verifications[0].verdict).toBe('PASS');
138
+ });
139
+ it('incomplete expression "2+" → defers to LLM (PASS)', () => {
140
+ const claim = makeClaim({
141
+ description: 'calculates 2+ = 5',
142
+ assertion: 'result is 5',
143
+ });
144
+ const llmV = makeLLMVerification(claim.id);
145
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
146
+ // "2+" can't be parsed, so no definitive formal evaluation → defers
147
+ expect(verifications[0].verdict).toBe('PASS');
148
+ });
149
+ });
150
+ // ── classifyClaim Tests ──
151
+ describe('classifyClaim classification', () => {
152
+ it('classifies arithmetic claims as arithmetic_correctness', () => {
153
+ const claim = makeClaim({
154
+ description: 'calculates the sum of two numbers',
155
+ assertion: 'returns the sum correctly',
156
+ });
157
+ const llmV = makeLLMVerification(claim.id);
158
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
159
+ // If classified as arithmetic, verification_method should be 'formal'
160
+ expect(verifications[0].verification_method).toBe('formal');
161
+ });
162
+ it('classifies "computes" as arithmetic', () => {
163
+ const claim = makeClaim({
164
+ description: 'computes the tax rate',
165
+ assertion: 'tax is computed correctly',
166
+ });
167
+ const llmV = makeLLMVerification(claim.id);
168
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
169
+ expect(verifications[0].verification_method).toBe('formal');
170
+ });
171
+ it('classifies "returns the product" as arithmetic', () => {
172
+ const claim = makeClaim({
173
+ description: 'returns the product of width and height',
174
+ assertion: 'area is width * height',
175
+ });
176
+ const llmV = makeLLMVerification(claim.id);
177
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
178
+ expect(verifications[0].verification_method).toBe('formal');
179
+ });
180
+ it('classifies "result is 42" as arithmetic', () => {
181
+ const claim = makeClaim({
182
+ description: 'the result is 42',
183
+ assertion: 'result equals 42',
184
+ });
185
+ const llmV = makeLLMVerification(claim.id);
186
+ const { verifications } = runFormalVerification('const x = 1;', 'typescript', [claim], [llmV]);
187
+ expect(verifications[0].verification_method).toBe('formal');
188
+ });
189
+ it('does NOT classify non-arithmetic claims as arithmetic', () => {
190
+ const claim = makeClaim({
191
+ description: 'handles null input gracefully',
192
+ assertion: 'checks for null before processing',
193
+ category: 'correctness',
194
+ });
195
+ const llmV = makeLLMVerification(claim.id);
196
+ const { verifications } = runFormalVerification('if (x != null) {}', 'typescript', [claim], [llmV]);
197
+ // Should be classified as null_check, not arithmetic_correctness
198
+ expect(verifications[0].reasoning).not.toContain('Arithmetic');
199
+ });
200
+ it('does NOT misclassify function existence claims', () => {
201
+ const claim = makeClaim({
202
+ description: 'defines a function called processData',
203
+ assertion: 'function processData exists',
204
+ });
205
+ const llmV = makeLLMVerification(claim.id);
206
+ const { verifications } = runFormalVerification('function processData() {}', 'typescript', [claim], [llmV]);
207
+ expect(verifications[0].reasoning).toContain('Declaration of');
208
+ });
209
+ it('does NOT misclassify error handling claims', () => {
210
+ const claim = makeClaim({
211
+ description: 'handles errors with try-catch',
212
+ assertion: 'wraps in try block',
213
+ category: 'error-handling',
214
+ });
215
+ const llmV = makeLLMVerification(claim.id);
216
+ const { verifications } = runFormalVerification('try { foo() } catch(e) { }', 'typescript', [claim], [llmV]);
217
+ expect(verifications[0].reasoning).toContain('Error handling');
218
+ });
219
+ it('does NOT misclassify SQL parameterization claims', () => {
220
+ const claim = makeClaim({
221
+ description: 'uses parameterized queries to prevent sql injection',
222
+ assertion: 'SQL queries are parameterized',
223
+ category: 'security',
224
+ });
225
+ const llmV = makeLLMVerification(claim.id);
226
+ const { verifications } = runFormalVerification('db.query("SELECT * FROM users WHERE id = $1", [id])', 'typescript', [claim], [llmV]);
227
+ expect(verifications[0].reasoning).toContain('parameterized');
228
+ });
229
+ });
230
+ // ── checkArithmeticCorrectness Integration Tests ──
231
+ describe('checkArithmeticCorrectness integration', () => {
232
+ it('PASS: correct constant expression matches claim (JS)', () => {
233
+ const code = 'const TAX_RATE = 0.08;\nconst price = 100;\nconst tax = 0.08 * 100;';
234
+ const claim = makeClaim({
235
+ description: 'calculates tax as 0.08 * 100 = 8',
236
+ assertion: 'tax equals 8',
237
+ });
238
+ const llmV = makeLLMVerification(claim.id);
239
+ const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
240
+ expect(verifications[0].verdict).toBe('PASS');
241
+ });
242
+ it('FAIL: claim states wrong arithmetic result', () => {
243
+ const code = 'const total = 25 + 75;';
244
+ const claim = makeClaim({
245
+ description: 'calculates 25 + 75 = 99',
246
+ assertion: 'total is 99',
247
+ });
248
+ const llmV = makeLLMVerification(claim.id);
249
+ const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
250
+ expect(verifications[0].verdict).toBe('FAIL');
251
+ });
252
+ it('PASS: no constant expressions → defers to LLM', () => {
253
+ const code = 'function add(a, b) { return a + b; }';
254
+ const claim = makeClaim({
255
+ description: 'calculates the sum of two numbers',
256
+ assertion: 'returns the correct sum',
257
+ });
258
+ const llmV = makeLLMVerification(claim.id);
259
+ const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
260
+ expect(verifications[0].verdict).toBe('PASS');
261
+ });
262
+ it('PASS: Python constant expression matches claim', () => {
263
+ const code = 'area = 5 * 10\nperimeter = 2 * (5 + 10)';
264
+ const claim = makeClaim({
265
+ description: 'calculates area as 5 * 10 = 50',
266
+ assertion: 'area equals 50',
267
+ });
268
+ const llmV = makeLLMVerification(claim.id);
269
+ const { verifications } = runFormalVerification(code, 'python', [claim], [llmV]);
270
+ expect(verifications[0].verdict).toBe('PASS');
271
+ });
272
+ it('FAIL: wrong claim expression verified deterministically', () => {
273
+ const code = 'const x = 1;';
274
+ const claim = makeClaim({
275
+ description: 'calculates 15 * 3 = 44',
276
+ assertion: 'result should be 44',
277
+ });
278
+ const llmV = makeLLMVerification(claim.id);
279
+ const { verifications } = runFormalVerification(code, 'typescript', [claim], [llmV]);
280
+ expect(verifications[0].verdict).toBe('FAIL');
281
+ expect(verifications[0].reasoning).toContain('Arithmetic error');
282
+ });
283
+ it('formal override: LLM says PASS but arithmetic is wrong', () => {
284
+ const code = 'const x = 1;';
285
+ const claim = makeClaim({
286
+ description: 'calculates 2 + 2 = 5',
287
+ assertion: 'result is 5',
288
+ });
289
+ const llmV = makeLLMVerification(claim.id, 'PASS');
290
+ const { verifications, stats } = runFormalVerification(code, 'typescript', [claim], [llmV]);
291
+ expect(verifications[0].verdict).toBe('FAIL');
292
+ expect(verifications[0].formal_override).toBeDefined();
293
+ expect(verifications[0].formal_override?.original_llm_verdict).toBe('PASS');
294
+ expect(verifications[0].formal_override?.formal_verdict).toBe('FAIL');
295
+ expect(stats.formal_overrides).toBe(1);
296
+ });
297
+ it('Go constant expression extraction', () => {
298
+ const code = 'const maxRetries int = 3 + 2';
299
+ const claim = makeClaim({
300
+ description: 'calculates 3 + 2 = 5',
301
+ assertion: 'maxRetries equals 5',
302
+ });
303
+ const llmV = makeLLMVerification(claim.id);
304
+ const { verifications } = runFormalVerification(code, 'go', [claim], [llmV]);
305
+ expect(verifications[0].verdict).toBe('PASS');
306
+ });
307
+ it('stats reflect arithmetic formal verification', () => {
308
+ const code = 'const x = 1;';
309
+ const claim = makeClaim({
310
+ description: 'calculates 10 + 5 = 15',
311
+ assertion: 'result is 15',
312
+ });
313
+ const llmV = makeLLMVerification(claim.id);
314
+ const { stats } = runFormalVerification(code, 'typescript', [claim], [llmV]);
315
+ expect(stats.formally_verified).toBeGreaterThanOrEqual(1);
316
+ });
317
+ });
318
+ //# sourceMappingURL=formal-verifier-arithmetic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal-verifier-arithmetic.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/formal-verifier-arithmetic.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,97 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseIntentResponse } from '../intent-extractor.js';
3
+ describe('parseIntentResponse', () => {
4
+ it('parses a well-formed manifest JSON', () => {
5
+ const json = JSON.stringify({
6
+ flows: [{
7
+ id: 'flow-signup',
8
+ name: 'User Signup',
9
+ description: 'New user creates an account',
10
+ actor: 'unauthenticated user',
11
+ trigger: 'POST /api/auth/signup',
12
+ steps: [{ order: 1, action: 'validate email format' }],
13
+ successCriteria: 'User account created and verification email sent',
14
+ errorPaths: ['Invalid email returns 400'],
15
+ codePaths: [{ file: 'src/routes/auth.ts' }],
16
+ }],
17
+ dataModel: [{
18
+ name: 'users',
19
+ source: 'prisma/schema.prisma',
20
+ fields: [{ name: 'id', type: 'uuid', constraints: ['PRIMARY KEY'] }],
21
+ relationships: [{ target: 'profiles', type: 'one-to-one' }],
22
+ }],
23
+ authModel: {
24
+ strategy: 'JWT',
25
+ roles: ['admin', 'user'],
26
+ guards: [{ pattern: '/api/*', requiredRole: 'user', mechanism: 'middleware' }],
27
+ },
28
+ featureMap: [{
29
+ name: 'Authentication',
30
+ flows: ['flow-signup'],
31
+ completeness: 'full',
32
+ }],
33
+ gaps: [{
34
+ type: 'missing-flow',
35
+ description: 'No password reset flow',
36
+ evidence: '/forgot-password route exists but handler is empty',
37
+ }],
38
+ });
39
+ const manifest = parseIntentResponse(json);
40
+ expect(manifest.flows).toHaveLength(1);
41
+ expect(manifest.flows[0].id).toBe('flow-signup');
42
+ expect(manifest.flows[0].steps).toHaveLength(1);
43
+ expect(manifest.dataModel).toHaveLength(1);
44
+ expect(manifest.dataModel[0].name).toBe('users');
45
+ expect(manifest.authModel.strategy).toBe('JWT');
46
+ expect(manifest.authModel.roles).toEqual(['admin', 'user']);
47
+ expect(manifest.featureMap).toHaveLength(1);
48
+ expect(manifest.gaps).toHaveLength(1);
49
+ expect(manifest.gaps[0].type).toBe('missing-flow');
50
+ });
51
+ it('strips markdown code fences', () => {
52
+ const json = '```json\n' + JSON.stringify({
53
+ flows: [], dataModel: [], authModel: { strategy: '', roles: [], guards: [] },
54
+ featureMap: [], gaps: [],
55
+ }) + '\n```';
56
+ const manifest = parseIntentResponse(json);
57
+ expect(manifest.flows).toEqual([]);
58
+ });
59
+ it('handles truncated JSON by closing open structures', () => {
60
+ // Simulate a truncated response that cuts off mid-array
61
+ const partial = '{"flows":[{"id":"flow-1","name":"Test","description":"d","actor":"a","trigger":"t","steps":[],"successCriteria":"s","errorPaths":[],"codePaths":[]}],"dataModel":[],"authModel":{"strategy":"","roles":[],"guards":[]},"featureMap":[],"gaps":[{"type":"missing-flow","description":"test","evidence":"e"';
62
+ // Missing closing }]}
63
+ const manifest = parseIntentResponse(partial);
64
+ expect(manifest.flows).toHaveLength(1);
65
+ expect(manifest.flows[0].id).toBe('flow-1');
66
+ });
67
+ it('returns empty arrays for missing fields', () => {
68
+ const json = JSON.stringify({});
69
+ const manifest = parseIntentResponse(json);
70
+ expect(manifest.flows).toEqual([]);
71
+ expect(manifest.dataModel).toEqual([]);
72
+ expect(manifest.gaps).toEqual([]);
73
+ });
74
+ it('normalizes flow fields to correct types', () => {
75
+ const json = JSON.stringify({
76
+ flows: [{
77
+ id: 123, // number instead of string
78
+ name: 'Test',
79
+ description: 'desc',
80
+ actor: 'user',
81
+ trigger: 'GET /test',
82
+ steps: [{ order: '1', action: 'do thing' }], // order as string
83
+ successCriteria: 'done',
84
+ errorPaths: [],
85
+ codePaths: [],
86
+ }],
87
+ dataModel: [],
88
+ authModel: { strategy: '', roles: [], guards: [] },
89
+ featureMap: [],
90
+ gaps: [],
91
+ });
92
+ const manifest = parseIntentResponse(json);
93
+ expect(typeof manifest.flows[0].id).toBe('string');
94
+ expect(typeof manifest.flows[0].steps[0].order).toBe('number');
95
+ });
96
+ });
97
+ //# sourceMappingURL=intent-extractor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-extractor.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/intent-extractor.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,KAAK,EAAE,CAAC;oBACN,EAAE,EAAE,aAAa;oBACjB,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,6BAA6B;oBAC1C,KAAK,EAAE,sBAAsB;oBAC7B,OAAO,EAAE,uBAAuB;oBAChC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;oBACtD,eAAe,EAAE,kDAAkD;oBACnE,UAAU,EAAE,CAAC,2BAA2B,CAAC;oBACzC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;iBAC5C,CAAC;YACF,SAAS,EAAE,CAAC;oBACV,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,sBAAsB;oBAC9B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;oBACpE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;iBAC5D,CAAC;YACF,SAAS,EAAE;gBACT,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;gBACxB,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;aAC/E;YACD,UAAU,EAAE,CAAC;oBACX,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,CAAC,aAAa,CAAC;oBACtB,YAAY,EAAE,MAAM;iBACrB,CAAC;YACF,IAAI,EAAE,CAAC;oBACL,IAAI,EAAE,cAAc;oBACpB,WAAW,EAAE,wBAAwB;oBACrC,QAAQ,EAAE,oDAAoD;iBAC/D,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YACxC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5E,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;SACzB,CAAC,GAAG,OAAO,CAAC;QAEb,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,wDAAwD;QACxD,MAAM,OAAO,GAAG,2SAA2S,CAAC;QAC5T,sBAAsB;QACtB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,KAAK,EAAE,CAAC;oBACN,EAAE,EAAE,GAAG,EAAE,2BAA2B;oBACpC,IAAI,EAAE,MAAM;oBACZ,WAAW,EAAE,MAAM;oBACnB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,kBAAkB;oBAC/D,eAAe,EAAE,MAAM;oBACvB,UAAU,EAAE,EAAE;oBACd,SAAS,EAAE,EAAE;iBACd,CAAC;YACF,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAClD,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { diffManifest } from '../intent-reviewer.js';
3
+ function makeManifest(overrides = {}) {
4
+ return {
5
+ version: 1,
6
+ extractedAt: '2026-01-01T00:00:00Z',
7
+ codebaseRoot: '/test',
8
+ frameworks: [],
9
+ flows: [],
10
+ dataModel: [],
11
+ authModel: { strategy: '', roles: [], guards: [] },
12
+ featureMap: [],
13
+ gaps: [],
14
+ ...overrides,
15
+ };
16
+ }
17
+ function makeFlow(id, name) {
18
+ return {
19
+ id, name, description: '', actor: '', trigger: '',
20
+ steps: [], successCriteria: '', errorPaths: [], codePaths: [],
21
+ };
22
+ }
23
+ describe('diffManifest', () => {
24
+ it('detects added flows', () => {
25
+ const saved = makeManifest({ flows: [makeFlow('flow-a', 'A')] });
26
+ const fresh = makeManifest({ flows: [makeFlow('flow-a', 'A'), makeFlow('flow-b', 'B')] });
27
+ const delta = diffManifest(saved, fresh);
28
+ expect(delta.addedFlows).toHaveLength(1);
29
+ expect(delta.addedFlows[0].id).toBe('flow-b');
30
+ expect(delta.removedFlows).toHaveLength(0);
31
+ });
32
+ it('detects removed flows', () => {
33
+ const saved = makeManifest({ flows: [makeFlow('flow-a', 'A'), makeFlow('flow-b', 'B')] });
34
+ const fresh = makeManifest({ flows: [makeFlow('flow-a', 'A')] });
35
+ const delta = diffManifest(saved, fresh);
36
+ expect(delta.removedFlows).toHaveLength(1);
37
+ expect(delta.removedFlows[0].id).toBe('flow-b');
38
+ });
39
+ it('detects changed flows by name difference', () => {
40
+ const saved = makeManifest({ flows: [makeFlow('flow-a', 'Old Name')] });
41
+ const fresh = makeManifest({ flows: [makeFlow('flow-a', 'New Name')] });
42
+ const delta = diffManifest(saved, fresh);
43
+ expect(delta.changedFlows).toHaveLength(1);
44
+ expect(delta.changedFlows[0].before.name).toBe('Old Name');
45
+ expect(delta.changedFlows[0].after.name).toBe('New Name');
46
+ });
47
+ it('returns empty delta when manifests are identical', () => {
48
+ const m = makeManifest({ flows: [makeFlow('flow-a', 'A')] });
49
+ const delta = diffManifest(m, m);
50
+ expect(delta.addedFlows).toHaveLength(0);
51
+ expect(delta.removedFlows).toHaveLength(0);
52
+ expect(delta.changedFlows).toHaveLength(0);
53
+ });
54
+ });
55
+ //# sourceMappingURL=intent-reviewer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-reviewer.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/intent-reviewer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * MR-GSM8K Benchmark — Real LLM A/B Test
4
+ *
5
+ * Uses 21 problems from MR-GSM8K where the <<expr=result>> arithmetic is
6
+ * provably wrong. Tests: does the LLM rubber-stamp the error, and does
7
+ * the formal verifier catch it?
8
+ *
9
+ * Usage: npx tsx src/lib/__tests__/mr-gsm8k-benchmark.ts
10
+ */
11
+ export {};