@stackmemoryai/stackmemory 1.5.4 → 1.5.6

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.
@@ -6,49 +6,49 @@
6
6
  "taskId": "eval-001",
7
7
  "taskName": "simple_function",
8
8
  "weight": 1,
9
- "passed": true,
10
- "passRate": 0.6666666666666666,
9
+ "passed": false,
10
+ "passRate": 0,
11
11
  "criteria": {
12
12
  "has_function": {
13
- "passed": true,
14
- "reason": "A complete, working function named is_palindrome is defined with proper syntax and type hints"
13
+ "passed": false,
14
+ "reason": "regex heuristic"
15
15
  },
16
16
  "handles_edge_cases": {
17
17
  "passed": false,
18
- "reason": "The function only handles spaces and case sensitivity, but doesn't handle punctuation, special characters, or empty strings - common edge cases for palindrome checking"
18
+ "reason": "regex heuristic"
19
19
  },
20
20
  "is_tested": {
21
- "passed": true,
22
- "reason": "Usage examples are provided showing the function being called with different inputs"
21
+ "passed": false,
22
+ "reason": "regex heuristic"
23
23
  }
24
24
  },
25
- "judgeMode": "llm",
26
- "duration": 10826,
27
- "output": "```python\ndef is_palindrome(s: str) -> bool:\n s = s.lower().replace(\" \", \"\")\n return s == s[::-1]\n```\n\n**Usage:**\n```python\nis_palindrome(\"racecar\") # True\nis_palindrome(\"A man a plan a canal Panama\") # True\nis_palindrome(\"hello\") # False\n```\n"
25
+ "judgeMode": "regex",
26
+ "duration": 2001,
27
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrH8UoQXi1F22atcpboR\"}\n"
28
28
  },
29
29
  {
30
30
  "taskId": "eval-002",
31
31
  "taskName": "refactor_code",
32
32
  "weight": 1.5,
33
33
  "passed": false,
34
- "passRate": 0,
34
+ "passRate": 0.3333333333333333,
35
35
  "criteria": {
36
36
  "uses_async": {
37
37
  "passed": false,
38
- "reason": "No async/await code is present. The AI output is a request for input rather than a refactored code example."
38
+ "reason": "regex heuristic"
39
39
  },
40
40
  "preserves_behavior": {
41
41
  "passed": false,
42
- "reason": "No refactored code is provided, so behavior cannot be preserved or verified."
42
+ "reason": "regex heuristic"
43
43
  },
44
44
  "no_nested_callbacks": {
45
- "passed": false,
46
- "reason": "No code refactoring was performed. The output does not demonstrate elimination of nested callbacks."
45
+ "passed": true,
46
+ "reason": "regex heuristic"
47
47
  }
48
48
  },
49
- "judgeMode": "llm",
50
- "duration": 13085,
51
- "output": "Please share the code you'd like me to refactor.\n"
49
+ "judgeMode": "regex",
50
+ "duration": 2353,
51
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrH8ejCcfMhFCybFnne9\"}\n"
52
52
  },
53
53
  {
54
54
  "taskId": "eval-003",
@@ -59,20 +59,20 @@
59
59
  "criteria": {
60
60
  "bug_fixed": {
61
61
  "passed": false,
62
- "reason": "No code was provided by the user, so no bug could be fixed. The AI correctly asked for the code but did not fix anything."
62
+ "reason": "regex heuristic"
63
63
  },
64
64
  "no_new_bugs": {
65
65
  "passed": false,
66
- "reason": "Cannot evaluate this criterion when no code was analyzed or modified."
66
+ "reason": "regex heuristic"
67
67
  },
68
68
  "explains_fix": {
69
69
  "passed": false,
70
- "reason": "No explanation of a fix was provided because no code was available to analyze or correct."
70
+ "reason": "regex heuristic"
71
71
  }
72
72
  },
73
- "judgeMode": "llm",
74
- "duration": 9146,
75
- "output": "I don't see any code in your message. Please share the code with the loop you'd like me to fix.\n"
73
+ "judgeMode": "regex",
74
+ "duration": 14371,
75
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrH9hUvnEXRvhB6kAfAy\"}\n"
76
76
  },
77
77
  {
78
78
  "taskId": "eval-004",
@@ -83,24 +83,24 @@
83
83
  "criteria": {
84
84
  "has_pagination": {
85
85
  "passed": false,
86
- "reason": "No pagination implementation provided; AI only asks clarifying questions instead of delivering code"
86
+ "reason": "regex heuristic"
87
87
  },
88
88
  "has_limit": {
89
89
  "passed": false,
90
- "reason": "No limit parameter implemented in any code"
90
+ "reason": "regex heuristic"
91
91
  },
92
92
  "has_offset": {
93
93
  "passed": false,
94
- "reason": "No offset parameter implemented in any code"
94
+ "reason": "regex heuristic"
95
95
  },
96
96
  "backwards_compatible": {
97
97
  "passed": false,
98
- "reason": "No implementation provided to evaluate backwards compatibility"
98
+ "reason": "regex heuristic"
99
99
  }
100
100
  },
101
- "judgeMode": "llm",
102
- "duration": 14908,
103
- "output": "Which API endpoint would you like to add pagination to? Can you point me to the specific file or endpoint?\n"
101
+ "judgeMode": "regex",
102
+ "duration": 10702,
103
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHAVg3xi13GBvhifFbr\"}\n"
104
104
  },
105
105
  {
106
106
  "taskId": "eval-005",
@@ -111,108 +111,108 @@
111
111
  "criteria": {
112
112
  "identifies_security_issue": {
113
113
  "passed": false,
114
- "reason": "The output does not identify any security issue. It only requests the PR to be reviewed without analyzing any code."
114
+ "reason": "regex heuristic"
115
115
  },
116
116
  "identifies_performance_issue": {
117
117
  "passed": false,
118
- "reason": "The output does not identify any performance issue. It only requests input without providing any analysis."
118
+ "reason": "regex heuristic"
119
119
  },
120
120
  "actionable_feedback": {
121
121
  "passed": false,
122
- "reason": "The output provides no feedback at all, only a request for the PR details. No actionable suggestions or recommendations are given."
122
+ "reason": "regex heuristic"
123
123
  }
124
124
  },
125
- "judgeMode": "llm",
126
- "duration": 16301,
127
- "output": "Which PR would you like me to review? Please share the PR URL, PR number + repo, or paste the diff/description.\n"
125
+ "judgeMode": "regex",
126
+ "duration": 7674,
127
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHAsdtwgaxuNK2wzEYF\"}\n"
128
128
  },
129
129
  {
130
130
  "taskId": "sm-001",
131
131
  "taskName": "add_mcp_tool_handler",
132
132
  "weight": 1.5,
133
- "passed": true,
134
- "passRate": 1,
133
+ "passed": false,
134
+ "passRate": 0,
135
135
  "criteria": {
136
136
  "has_switch_case": {
137
- "passed": true,
138
- "reason": "The output shows a valid case clause 'get_frame_summary': with proper switch/case syntax"
137
+ "passed": false,
138
+ "reason": "regex heuristic"
139
139
  },
140
140
  "has_zod_schema": {
141
- "passed": true,
142
- "reason": "Zod schema is defined with z.object({ frameId: z.string().min(1) })"
141
+ "passed": false,
142
+ "reason": "regex heuristic"
143
143
  },
144
144
  "validates_input": {
145
- "passed": true,
146
- "reason": "Input validation occurs via .parse(args) which will throw if frameId is missing or invalid"
145
+ "passed": false,
146
+ "reason": "regex heuristic"
147
147
  },
148
148
  "returns_typed_response": {
149
- "passed": true,
150
- "reason": "Returns an object with the exact required fields: { frameId, name, status, eventCount }"
149
+ "passed": false,
150
+ "reason": "regex heuristic"
151
151
  },
152
152
  "handles_not_found": {
153
- "passed": true,
154
- "reason": "Explicitly checks if frame exists and throws an Error with descriptive message if not found"
153
+ "passed": false,
154
+ "reason": "regex heuristic"
155
155
  }
156
156
  },
157
- "judgeMode": "llm",
158
- "duration": 59274,
159
- "output": "The edit was denied. Please grant write permission to `/private/tmp/gepa-eval-r2ZUp5/mcp-dispatch-stub.ts` and I'll apply the change.\n\nHere's what I'm adding at line 32 (replacing the TODO comment):\n\n```ts\ncase 'get_frame_summary': {\n const input = z.object({ frameId: z.string().min(1) }).parse(args);\n const frame = frames.get(input.frameId);\n if (!frame) throw new Error(`Frame not found: ${input.frameId}`);\n return { frameId: frame.id, name: frame.name, status: frame.status, eventCount: frame.events.length };\n}\n```\n\n- Zod validates `frameId` as a required non-empty string\n- Throws if the frame doesn't exist (consistent with `close_frame`)\n- Returns `{ frameId, name, status, eventCount }` derived from `frame.events.length`\n"
157
+ "judgeMode": "regex",
158
+ "duration": 15713,
159
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHCBQ1kWoBV5oQ7x6jm\"}\n"
160
160
  },
161
161
  {
162
162
  "taskId": "sm-002",
163
163
  "taskName": "fix_fts5_trigger_bug",
164
164
  "weight": 1.8,
165
- "passed": true,
166
- "passRate": 1,
165
+ "passed": false,
166
+ "passRate": 0,
167
167
  "criteria": {
168
168
  "has_delete_trigger": {
169
- "passed": true,
170
- "reason": "A DELETE trigger named 'frames_ad' is defined with AFTER DELETE ON frames clause"
169
+ "passed": false,
170
+ "reason": "regex heuristic"
171
171
  },
172
172
  "uses_fts_delete_syntax": {
173
- "passed": true,
174
- "reason": "The trigger uses FTS5 delete syntax: INSERT INTO frames_fts(frames_fts, ...) VALUES ('delete', ...)"
173
+ "passed": false,
174
+ "reason": "regex heuristic"
175
175
  },
176
176
  "references_old_row": {
177
- "passed": true,
178
- "reason": "The trigger correctly references old.rowid, old.name, old.digest_text, old.inputs, old.outputs"
177
+ "passed": false,
178
+ "reason": "regex heuristic"
179
179
  },
180
180
  "matches_column_list": {
181
- "passed": true,
182
- "reason": "The column list (rowid, name, digest_text, inputs, outputs) matches the existing INSERT and UPDATE triggers"
181
+ "passed": false,
182
+ "reason": "regex heuristic"
183
183
  }
184
184
  },
185
- "judgeMode": "llm",
186
- "duration": 27339,
187
- "output": "Waiting for your approval to write the file. The change replaces the bug comment with:\n\n```sql\n-- Sync trigger: DELETE\nCREATE TRIGGER IF NOT EXISTS frames_ad AFTER DELETE ON frames BEGIN\n INSERT INTO frames_fts(frames_fts, rowid, name, digest_text, inputs, outputs)\n VALUES ('delete', old.rowid, old.name, old.digest_text, old.inputs, old.outputs);\nEND;\n```\n\nThis follows the same pattern as the first half of the UPDATE trigger using the FTS5 `'delete'` command with `old.*` values to remove the stale entry from the index.\n"
185
+ "judgeMode": "regex",
186
+ "duration": 13373,
187
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHDBbCchZT3sX4zPjLC\"}\n"
188
188
  },
189
189
  {
190
190
  "taskId": "sm-003",
191
191
  "taskName": "daemon_service_lifecycle",
192
192
  "weight": 1.5,
193
- "passed": true,
194
- "passRate": 1,
193
+ "passed": false,
194
+ "passRate": 0,
195
195
  "criteria": {
196
196
  "clears_old_interval": {
197
- "passed": true,
198
- "reason": "The fix adds a guard `if (this.isRunning) return` to `start()`, which prevents calling `setInterval` twice. Combined with `stop()` calling `clearInterval`, old intervals are properly cleared before new ones are created."
197
+ "passed": false,
198
+ "reason": "regex heuristic"
199
199
  },
200
200
  "prevents_double_start": {
201
- "passed": true,
202
- "reason": "The guard `if (this.isRunning) return` at the top of `start()` directly prevents double-calls to `start()` by returning early if already running."
201
+ "passed": false,
202
+ "reason": "regex heuristic"
203
203
  },
204
204
  "has_getstate_method": {
205
- "passed": true,
206
- "reason": "A `getState()` method is defined with working implementation that returns an object with the required properties."
205
+ "passed": false,
206
+ "reason": "regex heuristic"
207
207
  },
208
208
  "returns_correct_state_shape": {
209
- "passed": true,
210
- "reason": "The `getState()` method returns an object with all four required fields: `isRunning`, `intervalMs`, `lastRunTime`, and `errorCount` with appropriate values."
209
+ "passed": false,
210
+ "reason": "regex heuristic"
211
211
  }
212
212
  },
213
- "judgeMode": "llm",
214
- "duration": 37880,
215
- "output": "It seems write permissions aren't granted for that file. Here are the two changes needed:\n\n**Fix 1 — guard `start()` against double-call** (`leaky-service.ts:28`):\n\n```typescript\nstart(): void {\n if (this.isRunning) return; // ADD THIS — prevents interval leak on double-start\n this.isRunning = true;\n const intervalMs = this.config.interval * 60 * 1000;\n // ...\n}\n```\n\n**Fix 2 — remove the BUG comment on `updateConfig`** (it's actually correct — it calls `stop()` first which clears the interval, then `start()` which now has the guard). The `updateConfig` bug comment was describing a secondary issue that's resolved by the `start()` guard.\n\n**Add `getState()`** (`leaky-service.ts:57`):\n\n```typescript\ngetState(): ServiceState {\n return {\n isRunning: this.isRunning,\n intervalMs: this.config.interval * 60 * 1000,\n lastRunTime: this.lastRunTime,\n errorCount: this.errorCount,\n };\n}\n```\n\n---\n\n**Root cause summary:**\n\n- `start()` set `this.isRunning = true` and called `setInterval` unconditionally, so calling it twice created two timers but only saved the second handle — the first leaked forever\n- `updateConfig` called `stop()` → `start()`, which was fine structurally, but since `start()` had no idempotency guard, any external call to `start()` before `updateConfig` finished would cause the same leak\n- The fix is a single `if (this.isRunning) return` at the top of `start()` — `stop()` already handles teardown correctly (`clearInterval` + `isRunning = false`)\n\nCan you grant write access to the file so I can apply the edits directly?\n"
213
+ "judgeMode": "regex",
214
+ "duration": 13204,
215
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHDxuUzJVDXUNNe9VDV\"}\n"
216
216
  }
217
217
  ]
218
218
  }
@@ -6,101 +6,101 @@
6
6
  "taskId": "eval-001",
7
7
  "taskName": "simple_function",
8
8
  "weight": 1,
9
- "passed": true,
10
- "passRate": 0.6666666666666666,
9
+ "passed": false,
10
+ "passRate": 0,
11
11
  "criteria": {
12
12
  "has_function": {
13
- "passed": true,
14
- "reason": "A complete, working TypeScript function named isPalindrome is defined with proper syntax and implementation"
13
+ "passed": false,
14
+ "reason": "regex heuristic"
15
15
  },
16
16
  "handles_edge_cases": {
17
- "passed": true,
18
- "reason": "The code handles edge cases by converting to lowercase and removing non-alphanumeric characters, which allows it to correctly process strings with spaces, punctuation, and mixed case"
17
+ "passed": false,
18
+ "reason": "regex heuristic"
19
19
  },
20
20
  "is_tested": {
21
21
  "passed": false,
22
- "reason": "No test cases or test calls are provided to verify the function works correctly"
22
+ "reason": "regex heuristic"
23
23
  }
24
24
  },
25
- "judgeMode": "llm",
26
- "duration": 7861,
27
- "output": "```typescript\nfunction isPalindrome(s: string): boolean {\n const cleaned = s.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n return cleaned === cleaned.split(\"\").reverse().join(\"\");\n}\n```\n"
25
+ "judgeMode": "regex",
26
+ "duration": 11520,
27
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHEzkPXz11rXCKbD7B1\"}\n"
28
28
  },
29
29
  {
30
30
  "taskId": "eval-002",
31
31
  "taskName": "refactor_code",
32
32
  "weight": 1.5,
33
33
  "passed": false,
34
- "passRate": 0,
34
+ "passRate": 0.3333333333333333,
35
35
  "criteria": {
36
36
  "uses_async": {
37
37
  "passed": false,
38
- "reason": "No async/await code is present in the output. The AI only requests the code to refactor rather than providing a refactored solution."
38
+ "reason": "regex heuristic"
39
39
  },
40
40
  "preserves_behavior": {
41
41
  "passed": false,
42
- "reason": "No refactored code is provided, so behavior cannot be verified or preserved."
42
+ "reason": "regex heuristic"
43
43
  },
44
44
  "no_nested_callbacks": {
45
- "passed": false,
46
- "reason": "No code transformation is shown. The output is a request for input rather than a completed refactoring task."
45
+ "passed": true,
46
+ "reason": "regex heuristic"
47
47
  }
48
48
  },
49
- "judgeMode": "llm",
50
- "duration": 10545,
51
- "output": "Which file or code snippet would you like me to refactor? Please share the file path or paste the code.\n"
49
+ "judgeMode": "regex",
50
+ "duration": 12665,
51
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHFwTUZE8W6bAVLsPPk\"}\n"
52
52
  },
53
53
  {
54
54
  "taskId": "eval-003",
55
55
  "taskName": "fix_bug",
56
56
  "weight": 1.2,
57
57
  "passed": false,
58
- "passRate": 0.3333333333333333,
58
+ "passRate": 0,
59
59
  "criteria": {
60
60
  "bug_fixed": {
61
61
  "passed": false,
62
- "reason": "No code was provided, so no bug was actually fixed. The AI only asked for the code to be shared."
62
+ "reason": "regex heuristic"
63
63
  },
64
64
  "no_new_bugs": {
65
- "passed": true,
66
- "reason": "No code was written, so no new bugs could be introduced."
65
+ "passed": false,
66
+ "reason": "regex heuristic"
67
67
  },
68
68
  "explains_fix": {
69
69
  "passed": false,
70
- "reason": "No explanation of any fix was provided since the AI didn't have code to analyze or fix."
70
+ "reason": "regex heuristic"
71
71
  }
72
72
  },
73
- "judgeMode": "llm",
74
- "duration": 10304,
75
- "output": "I don't see any code or file attached to your message. Could you share the code with the loop you'd like me to fix?\n"
73
+ "judgeMode": "regex",
74
+ "duration": 27002,
75
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHHtYAW69LcvV12QvWP\"}\n"
76
76
  },
77
77
  {
78
78
  "taskId": "eval-004",
79
79
  "taskName": "add_feature",
80
80
  "weight": 1.5,
81
81
  "passed": false,
82
- "passRate": 0.5,
82
+ "passRate": 0,
83
83
  "criteria": {
84
84
  "has_pagination": {
85
- "passed": true,
86
- "reason": "Output describes pagination implementation with page parameter and pagination response object"
85
+ "passed": false,
86
+ "reason": "regex heuristic"
87
87
  },
88
88
  "has_limit": {
89
- "passed": true,
90
- "reason": "Output explicitly mentions limit parameter with default of 20 and max of 100"
89
+ "passed": false,
90
+ "reason": "regex heuristic"
91
91
  },
92
92
  "has_offset": {
93
93
  "passed": false,
94
- "reason": "Output uses page-based pagination, not offset-based. No offset parameter is mentioned or proposed"
94
+ "reason": "regex heuristic"
95
95
  },
96
96
  "backwards_compatible": {
97
97
  "passed": false,
98
- "reason": "Output is only a description/proposal, not actual implementation. No code is provided to verify backwards compatibility. Requesting permission to apply changes suggests code hasn't been written yet"
98
+ "reason": "regex heuristic"
99
99
  }
100
100
  },
101
- "judgeMode": "llm",
102
- "duration": 82928,
103
- "output": "Please approve the file write permission, then I'll apply the change. The update will:\n\n- Accept `?page=1&limit=20` query params (defaults: page 1, limit 20, max limit 100)\n- Return `{ data, pagination: { page, limit, total, totalPages } }`\n"
101
+ "judgeMode": "regex",
102
+ "duration": 29043,
103
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHKpQBSNBcxuxK9KUqJ\"}\n"
104
104
  },
105
105
  {
106
106
  "taskId": "eval-005",
@@ -111,20 +111,20 @@
111
111
  "criteria": {
112
112
  "identifies_security_issue": {
113
113
  "passed": false,
114
- "reason": "No PR was provided to review, so no security issues could be identified"
114
+ "reason": "regex heuristic"
115
115
  },
116
116
  "identifies_performance_issue": {
117
117
  "passed": false,
118
- "reason": "No PR was provided to review, so no performance issues could be identified"
118
+ "reason": "regex heuristic"
119
119
  },
120
120
  "actionable_feedback": {
121
121
  "passed": false,
122
- "reason": "The output is a request for input rather than feedback; it provides no actionable guidance on any code"
122
+ "reason": "regex heuristic"
123
123
  }
124
124
  },
125
- "judgeMode": "llm",
126
- "duration": 15060,
127
- "output": "Which PR would you like me to review? Please share the PR URL, PR number (with repo), or paste the diff/changes directly.\n"
125
+ "judgeMode": "regex",
126
+ "duration": 8490,
127
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHLgxyfxUspbEDigGgS\"}\n"
128
128
  },
129
129
  {
130
130
  "taskId": "sm-001",
@@ -135,28 +135,28 @@
135
135
  "criteria": {
136
136
  "has_switch_case": {
137
137
  "passed": false,
138
- "reason": "No switch/case code is present in the output. The AI only requested permission without providing implementation."
138
+ "reason": "regex heuristic"
139
139
  },
140
140
  "has_zod_schema": {
141
141
  "passed": false,
142
- "reason": "No Zod validation schema is defined or demonstrated in the output."
142
+ "reason": "regex heuristic"
143
143
  },
144
144
  "validates_input": {
145
145
  "passed": false,
146
- "reason": "No input validation logic is implemented in the output."
146
+ "reason": "regex heuristic"
147
147
  },
148
148
  "returns_typed_response": {
149
149
  "passed": false,
150
- "reason": "No function with typed response structure is defined in the output."
150
+ "reason": "regex heuristic"
151
151
  },
152
152
  "handles_not_found": {
153
153
  "passed": false,
154
- "reason": "No error handling or not-found case logic is present in the output."
154
+ "reason": "regex heuristic"
155
155
  }
156
156
  },
157
- "judgeMode": "llm",
158
- "duration": 30681,
159
- "output": "Please approve the file write permission so I can make the edit.\n"
157
+ "judgeMode": "regex",
158
+ "duration": 6817,
159
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHMCFrhqQfsP1snyVg2\"}\n"
160
160
  },
161
161
  {
162
162
  "taskId": "sm-002",
@@ -167,52 +167,52 @@
167
167
  "criteria": {
168
168
  "has_delete_trigger": {
169
169
  "passed": false,
170
- "reason": "No trigger code was provided; only a request for permission to add one"
170
+ "reason": "regex heuristic"
171
171
  },
172
172
  "uses_fts_delete_syntax": {
173
173
  "passed": false,
174
- "reason": "No FTS5 DELETE syntax (INSERT INTO frames_fts) is present in the output"
174
+ "reason": "regex heuristic"
175
175
  },
176
176
  "references_old_row": {
177
177
  "passed": false,
178
- "reason": "No reference to OLD table values appears in the output"
178
+ "reason": "regex heuristic"
179
179
  },
180
180
  "matches_column_list": {
181
181
  "passed": false,
182
- "reason": "No column list is defined or matched in the output"
182
+ "reason": "regex heuristic"
183
183
  }
184
184
  },
185
- "judgeMode": "llm",
186
- "duration": 21470,
187
- "output": "Please approve the file write so I can add the DELETE trigger.\n"
185
+ "judgeMode": "regex",
186
+ "duration": 6901,
187
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHMhw3jFy6vjU3Xs2uG\"}\n"
188
188
  },
189
189
  {
190
190
  "taskId": "sm-003",
191
191
  "taskName": "daemon_service_lifecycle",
192
192
  "weight": 1.5,
193
- "passed": true,
194
- "passRate": 0.75,
193
+ "passed": false,
194
+ "passRate": 0,
195
195
  "criteria": {
196
196
  "clears_old_interval": {
197
- "passed": true,
198
- "reason": "The fix adds `if (this.isRunning) this.stop()` which clears the existing interval before starting a new one by calling the existing stop() logic."
197
+ "passed": false,
198
+ "reason": "regex heuristic"
199
199
  },
200
200
  "prevents_double_start": {
201
- "passed": true,
202
- "reason": "The guard `if (this.isRunning) this.stop()` prevents double-start by checking if already running and stopping first, avoiding interval leaks."
201
+ "passed": false,
202
+ "reason": "regex heuristic"
203
203
  },
204
204
  "has_getstate_method": {
205
205
  "passed": false,
206
- "reason": "The output shows a diff with getState() method syntax but does not provide the actual complete function definition or indicate it's truly implemented. It only shows a code snippet/diff format without confirmation of full implementation."
206
+ "reason": "regex heuristic"
207
207
  },
208
208
  "returns_correct_state_shape": {
209
- "passed": true,
210
- "reason": "The getState() method returns an object with all four required properties: isRunning, intervalMs, lastRunTime, and errorCount with appropriate type conversions."
209
+ "passed": false,
210
+ "reason": "regex heuristic"
211
211
  }
212
212
  },
213
- "judgeMode": "llm",
214
- "duration": 31554,
215
- "output": "It looks like the tool needs your permission to write. Please approve the file edit, then I'll apply both changes at once. Here's the full diff of what I'm making:\n\n**1. Fix `start()` — add guard to clear existing interval:**\n```diff\n- // BUG: No guard against double-start ...\n start(): void {\n+ if (this.isRunning) this.stop(); // clear any existing interval before starting\n this.isRunning = true;\n```\n\n**2. Clean up `updateConfig()` comment** (the bug is now fixed in `start()`):\n```diff\n- // BUG: Calls stop() then start() but start() doesn't check...\n updateConfig(config: Partial<ServiceConfig>): void {\n```\n\n**3. Replace the TODO with `getState()`:**\n```diff\n- // TODO: Add getState() method returning ServiceState\n+ getState(): ServiceState {\n+ return {\n+ isRunning: this.isRunning,\n+ intervalMs: this.config.interval * 60 * 1000,\n+ lastRunTime: this.lastRunTime,\n+ errorCount: this.errorCount,\n+ };\n+ }\n```\n\nOnce you grant write permission, I'll apply all three edits. The root fix is the `if (this.isRunning) this.stop()` guard in `start()` — it ensures the old `intervalId` is always cleared via the existing `stop()` logic before a new interval is created, whether triggered directly or via `updateConfig()`.\n"
213
+ "judgeMode": "regex",
214
+ "duration": 10093,
215
+ "output": "API Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"You have reached your specified API usage limits. You will regain access on 2026-04-01 at 00:00 UTC.\"},\"request_id\":\"req_011CYrHNHqVXuMRF1aQBXcv1\"}\n"
216
216
  }
217
217
  ]
218
218
  }