@stackmemoryai/stackmemory 1.5.3 → 1.5.5

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.
@@ -11,96 +11,96 @@
11
11
  "criteria": {
12
12
  "has_function": {
13
13
  "passed": false,
14
- "reason": "No actual function code is provided, only a description of what the function would do"
14
+ "reason": "regex heuristic"
15
15
  },
16
16
  "handles_edge_cases": {
17
17
  "passed": false,
18
- "reason": "Edge cases are mentioned in the description but not actually handled in code since no code is provided"
18
+ "reason": "regex heuristic"
19
19
  },
20
20
  "is_tested": {
21
21
  "passed": false,
22
- "reason": "No test cases or test code are shown"
22
+ "reason": "regex heuristic"
23
23
  }
24
24
  },
25
- "judgeMode": "llm",
26
- "duration": 14935,
27
- "output": "I've written a palindrome checker function that:\n\n- Normalizes the string (lowercase, removes non-alphanumeric characters)\n- Compares the cleaned string with its reverse\n- Returns true if they match\n\nThe function handles edge cases like spaces, punctuation, and mixed case (e.g., \"A man, a plan, a canal: Panama\" returns true).\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 provided in the output. The AI only asks for code to be shared and does not demonstrate any async/await refactoring."
38
+ "reason": "regex heuristic"
39
39
  },
40
40
  "preserves_behavior": {
41
41
  "passed": false,
42
- "reason": "Without providing refactored code, behavior cannot be verified or preserved. The output is a request for input rather than a solution."
42
+ "reason": "regex heuristic"
43
43
  },
44
44
  "no_nested_callbacks": {
45
- "passed": false,
46
- "reason": "No code refactoring was performed, so there is no demonstration that nested callbacks were eliminated or replaced with async/await patterns."
45
+ "passed": true,
46
+ "reason": "regex heuristic"
47
47
  }
48
48
  },
49
- "judgeMode": "llm",
50
- "duration": 9934,
51
- "output": "I'd be happy to help refactor code from callbacks to async/await! However, I don't see any code in your message. Could you please share the code you'd like me to refactor?\n\nYou can either:\n1. Provide the file path (e.g., `src/some-file.ts`)\n2. Paste the code directly\n3. Describe which file/function needs refactoring\n\nOnce you share the code, I'll refactor it to use modern async/await syntax.\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",
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 by the user, so the AI could not fix any bug. The output only requests code without attempting to fix anything."
62
+ "reason": "regex heuristic"
63
63
  },
64
64
  "no_new_bugs": {
65
- "passed": true,
66
- "reason": "Since no code fix was attempted, no new bugs were 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 is provided. The AI only asks for code to be shared and does not explain what an off-by-one error is or how to fix it."
70
+ "reason": "regex heuristic"
71
71
  }
72
72
  },
73
- "judgeMode": "llm",
74
- "duration": 11837,
75
- "output": "I'd be happy to help fix the off-by-one error! However, I don't see any code in your message. Could you please share the code containing the loop with the off-by-one error?\n\nYou can either:\n1. Paste the code snippet directly\n2. Tell me which file contains the problematic loop so I can read it\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",
79
79
  "taskName": "add_feature",
80
80
  "weight": 1.5,
81
- "passed": true,
82
- "passRate": 0.75,
81
+ "passed": false,
82
+ "passRate": 0,
83
83
  "criteria": {
84
84
  "has_pagination": {
85
- "passed": true,
86
- "reason": "Pagination is explicitly described with page/limit parameters and pagination metadata in response"
85
+ "passed": false,
86
+ "reason": "regex heuristic"
87
87
  },
88
88
  "has_limit": {
89
- "passed": true,
90
- "reason": "Limit parameter is defined with default value of 10 and max constraint 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. Offset parameter is not mentioned or implemented"
94
+ "reason": "regex heuristic"
95
95
  },
96
96
  "backwards_compatible": {
97
- "passed": true,
98
- "reason": "Default values (page=1, limit=10) ensure existing calls without parameters continue to work"
97
+ "passed": false,
98
+ "reason": "regex heuristic"
99
99
  }
100
100
  },
101
- "judgeMode": "llm",
102
- "duration": 23886,
103
- "output": "I've added pagination to the `/users` endpoint with:\n\n**Query Parameters:**\n- `page` (default: 1, min: 1)\n- `limit` (default: 10, min: 1, max: 100)\n\n**Response Format:**\n```json\n{\n \"data\": [...users],\n \"pagination\": {\n \"page\": 1,\n \"limit\": 10,\n \"total\": 100,\n \"totalPages\": 10,\n \"hasNext\": true,\n \"hasPrev\": false\n }\n}\n```\n\n**Examples:**\n- `GET /users` first 10 users\n- `GET /users?page=2&limit=20` users 21-40\n- `GET /users?page=5&limit=25` → users 101-125 (last page)\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,20 +111,20 @@
111
111
  "criteria": {
112
112
  "identifies_security_issue": {
113
113
  "passed": false,
114
- "reason": "The output does not identify any security issues. It only requests more information without performing any actual review."
114
+ "reason": "regex heuristic"
115
115
  },
116
116
  "identifies_performance_issue": {
117
117
  "passed": false,
118
- "reason": "The output does not identify any performance issues. It is a request for additional context rather than an actual review."
118
+ "reason": "regex heuristic"
119
119
  },
120
120
  "actionable_feedback": {
121
121
  "passed": false,
122
- "reason": "The output provides no actionable feedback about code issues. It only lists procedural steps for obtaining PR information, which is not actionable feedback about the code itself."
122
+ "reason": "regex heuristic"
123
123
  }
124
124
  },
125
- "judgeMode": "llm",
126
- "duration": 16784,
127
- "output": "I need more information to review the PR. Could you provide:\n\n1. **PR link or number** (e.g., GitHub URL or PR #123)\n2. **PR description/changes**, or\n3. **Specific files to review**\n\nIf you're using GitHub, I can fetch the PR details using the `gh` CLI:\n\n```bash\ngh pr view <number>\ngh pr diff <number>\n```\n\nOr if you have specific files that changed, let me know their paths and I'll review them directly.\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",
@@ -135,84 +135,84 @@
135
135
  "criteria": {
136
136
  "has_switch_case": {
137
137
  "passed": false,
138
- "reason": "AI claims to have added the handler but provides no actual code showing a switch/case statement. Only describes it was added to a file at specific line numbers without showing the implementation."
138
+ "reason": "regex heuristic"
139
139
  },
140
140
  "has_zod_schema": {
141
141
  "passed": false,
142
- "reason": "AI mentions Zod validation in text but does not provide actual Zod schema code. The schema definition `z.object({ frameId: z.string() })` is only described, not shown as implemented."
142
+ "reason": "regex heuristic"
143
143
  },
144
144
  "validates_input": {
145
145
  "passed": false,
146
- "reason": "No actual code shown demonstrating input validation. The claim about validation is unsupported by visible implementation details."
146
+ "reason": "regex heuristic"
147
147
  },
148
148
  "returns_typed_response": {
149
149
  "passed": false,
150
- "reason": "No actual return statement or type definition is shown in the output. The return shape is only described narratively, not demonstrated in code."
150
+ "reason": "regex heuristic"
151
151
  },
152
152
  "handles_not_found": {
153
153
  "passed": false,
154
- "reason": "While error handling is mentioned, no actual code showing the error handling logic is provided. The claim about throwing if frame not found is unverified."
154
+ "reason": "regex heuristic"
155
155
  }
156
156
  },
157
- "judgeMode": "llm",
158
- "duration": 30061,
159
- "output": "Done! I've added the `get_frame_summary` handler to mcp-dispatch-stub.ts:32-41. It follows the existing pattern:\n\n- **Zod validation**: `z.object({ frameId: z.string() })` ensures required string input\n- **Error handling**: Throws if frame not found (consistent with `close_frame`)\n- **Return shape**: `{ frameId, name, status, eventCount }`\n\nThe handler retrieves the frame from the store and returns a summary with the event count computed 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 explicitly defined with CREATE TRIGGER IF NOT EXISTS syntax, targeting the frames table."
169
+ "passed": false,
170
+ "reason": "regex heuristic"
171
171
  },
172
172
  "uses_fts_delete_syntax": {
173
- "passed": true,
174
- "reason": "The trigger uses FTS5's special 'delete' command in the VALUES clause: VALUES('delete', old.rowid, ...), which is the correct syntax for removing entries from an FTS5 index."
173
+ "passed": false,
174
+ "reason": "regex heuristic"
175
175
  },
176
176
  "references_old_row": {
177
- "passed": true,
178
- "reason": "The trigger correctly references the deleted row using 'old' qualifiers: 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 (frames_fts, rowid, name, digest_text, inputs, outputs) matches the pattern used in existing INSERT and UPDATE triggers, maintaining consistency across all three DML triggers."
181
+ "passed": false,
182
+ "reason": "regex heuristic"
183
183
  }
184
184
  },
185
- "judgeMode": "llm",
186
- "duration": 39327,
187
- "output": "Added the missing DELETE trigger `frames_ad` following the existing pattern:\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 matches the pattern used in the UPDATE trigger it uses FTS5's special `'delete'` command to remove entries from the index when frames are deleted from the main table.\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": 0.75,
193
+ "passed": false,
194
+ "passRate": 0,
195
195
  "criteria": {
196
196
  "clears_old_interval": {
197
197
  "passed": false,
198
- "reason": "The AI output only prevents double-start but doesn't clear the old interval. The fix uses `if (this.isRunning) return;` which exits early, but doesn't call `clearInterval()` on any existing `intervalId`. A proper fix would need `clearInterval(this.intervalId)` before creating a new one, especially in `updateConfig()`."
198
+ "reason": "regex heuristic"
199
199
  },
200
200
  "prevents_double_start": {
201
- "passed": true,
202
- "reason": "The guard condition `if (this.isRunning) return;` at the start of `start()` effectively prevents calling the method twice while 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 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 returned object includes 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": 31264,
215
- "output": "I've identified the fixes needed for `/private/tmp/gepa-eval-yzj5wz/leaky-service.ts`:\n\n## Fixes\n\n**1. Timer leak fix (line 28)** — Add guard in `start()`:\n```typescript\nstart(): void {\n if (this.isRunning) return; // Prevent double-start\n // ... rest of method\n}\n```\n\n**2. Add `getState()` method** (after line 55):\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\nThe root cause: `start()` doesn't check if the service is already running before creating a new interval. If called twice (or via `updateConfig()` when `stop()` fails silently), it overwrites `intervalId` without clearing the old timer, causing the leak.\n\nReady to apply these changes?\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
  }
@@ -11,44 +11,44 @@
11
11
  "criteria": {
12
12
  "has_function": {
13
13
  "passed": false,
14
- "reason": "No function is defined or implemented. The AI output only contains a statement about waiting for permission approval."
14
+ "reason": "regex heuristic"
15
15
  },
16
16
  "handles_edge_cases": {
17
17
  "passed": false,
18
- "reason": "No code is present to handle edge cases. Without a function implementation, edge cases cannot be addressed."
18
+ "reason": "regex heuristic"
19
19
  },
20
20
  "is_tested": {
21
21
  "passed": false,
22
- "reason": "No tests are provided. The criterion expects this to be false, but the output contains no code whatsoever to test or not test."
22
+ "reason": "regex heuristic"
23
23
  }
24
24
  },
25
- "judgeMode": "llm",
26
- "duration": 26808,
27
- "output": "Let me wait for permission approval before proceeding.\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 code to be provided without delivering any refactored async/await implementation."
38
+ "reason": "regex heuristic"
39
39
  },
40
40
  "preserves_behavior": {
41
41
  "passed": false,
42
- "reason": "No refactored code exists to evaluate whether behavior is preserved. The output is a request for input rather than a solution."
42
+ "reason": "regex heuristic"
43
43
  },
44
44
  "no_nested_callbacks": {
45
- "passed": false,
46
- "reason": "No code transformation was performed. The output contains no callback elimination or async/await restructuring."
45
+ "passed": true,
46
+ "reason": "regex heuristic"
47
47
  }
48
48
  },
49
- "judgeMode": "llm",
50
- "duration": 9457,
51
- "output": "I'd be happy to help refactor code from callbacks to async/await! However, I don't see any code provided yet. Could you please share the code you'd like me to refactor?\n\nYou can either:\n1. Provide the file path (e.g., `src/path/to/file.ts`)\n2. Paste the code directly\n3. Point me to a specific function or module\n\nOnce you share the code, I'll refactor it to use modern async/await syntax.\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",
@@ -59,48 +59,48 @@
59
59
  "criteria": {
60
60
  "bug_fixed": {
61
61
  "passed": false,
62
- "reason": "No code was provided in the output - only empty code blocks. The bug cannot be fixed without actual code."
62
+ "reason": "regex heuristic"
63
63
  },
64
64
  "no_new_bugs": {
65
65
  "passed": false,
66
- "reason": "No code was provided to evaluate for new bugs."
66
+ "reason": "regex heuristic"
67
67
  },
68
68
  "explains_fix": {
69
69
  "passed": false,
70
- "reason": "No explanation was provided. The output is completely empty."
70
+ "reason": "regex heuristic"
71
71
  }
72
72
  },
73
- "judgeMode": "llm",
74
- "duration": 24117,
75
- "output": "\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
- "passed": true,
82
- "passRate": 0.75,
81
+ "passed": false,
82
+ "passRate": 0,
83
83
  "criteria": {
84
84
  "has_pagination": {
85
- "passed": true,
86
- "reason": "Pagination is clearly described with page and limit parameters, and response includes pagination metadata object"
85
+ "passed": false,
86
+ "reason": "regex heuristic"
87
87
  },
88
88
  "has_limit": {
89
- "passed": true,
90
- "reason": "Limit parameter is explicitly defined with default of 10 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. Offset parameter is not mentioned or implemented"
94
+ "reason": "regex heuristic"
95
95
  },
96
96
  "backwards_compatible": {
97
- "passed": true,
98
- "reason": "Default values (page=1, limit=10) ensure existing calls without parameters continue to work as before"
97
+ "passed": false,
98
+ "reason": "regex heuristic"
99
99
  }
100
100
  },
101
- "judgeMode": "llm",
102
- "duration": 24827,
103
- "output": "I've added pagination to the `/users` endpoint with the following features:\n\n**Query Parameters:**\n- `page` (default: 1, min: 1)\n- `limit` (default: 10, min: 1, max: 100)\n\n**Response Format:**\n```json\n{\n \"data\": [...],\n \"pagination\": {\n \"page\": 1,\n \"limit\": 10,\n \"total\": 100,\n \"totalPages\": 10,\n \"hasNext\": true,\n \"hasPrev\": false\n }\n}\n```\n\n**Usage Examples:**\n- `GET /users` First 10 users\n- `GET /users?page=2&limit=20` Users 21-40\n- `GET /users?limit=50` → First 50 users\n\nThe implementation includes:\n- Safe parameter parsing with defaults\n- Bounds checking (limit capped at 100)\n- Comprehensive pagination metadata\n- Navigation helpers (hasNext/hasPrev)\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,52 +111,52 @@
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 more information about the PR and does not analyze any code for security vulnerabilities."
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 is a meta-response asking for input rather than an actual code review."
118
+ "reason": "regex heuristic"
119
119
  },
120
120
  "actionable_feedback": {
121
121
  "passed": false,
122
- "reason": "While the output provides reasonable next steps to enable a review, it does not provide any actionable feedback about code issues. It is a request for clarification, not feedback on actual problems."
122
+ "reason": "regex heuristic"
123
123
  }
124
124
  },
125
- "judgeMode": "llm",
126
- "duration": 15976,
127
- "output": "I see this isn't a git repository. Could you please provide:\n\n1. **PR URL** (e.g., GitHub/GitLab link), or\n2. **Branch name** to compare, or\n3. **Changed files** you'd like me to review\n\nAlternatively, if you have a diff file or can paste the PR details, I can review that 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",
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": "Code shows a switch/case statement with 'case' keyword and proper case block syntax"
137
+ "passed": false,
138
+ "reason": "regex heuristic"
139
139
  },
140
140
  "has_zod_schema": {
141
- "passed": true,
142
- "reason": "Zod schema is defined inline: z.object({ frameId: z.string() })"
141
+ "passed": false,
142
+ "reason": "regex heuristic"
143
143
  },
144
144
  "validates_input": {
145
- "passed": true,
146
- "reason": "Input validation is performed via .parse(args) which will throw on invalid input"
145
+ "passed": false,
146
+ "reason": "regex heuristic"
147
147
  },
148
148
  "returns_typed_response": {
149
- "passed": true,
150
- "reason": "Returns an object with all required fields: frameId, name, status, eventCount with appropriate types"
149
+ "passed": false,
150
+ "reason": "regex heuristic"
151
151
  },
152
152
  "handles_not_found": {
153
- "passed": true,
154
- "reason": "Includes explicit null check with error thrown when frame is not found in the frames map"
153
+ "passed": false,
154
+ "reason": "regex heuristic"
155
155
  }
156
156
  },
157
- "judgeMode": "llm",
158
- "duration": 34329,
159
- "output": "I've added the `get_frame_summary` handler. The implementation:\n\n**Pattern Match:**\n- Uses switch/case dispatch like existing handlers\n- Zod validation: `z.object({ frameId: z.string() }).parse(args)`\n- Error handling: throws if frame not found\n- Returns typed object: `{ frameId, name, status, eventCount }`\n\n**Implementation:**\n```typescript\ncase 'get_frame_summary': {\n const input = z.object({ frameId: z.string() }).parse(args);\n const frame = frames.get(input.frameId);\n if (!frame) throw new Error(`Frame not found: ${input.frameId}`);\n return {\n frameId: frame.id,\n name: frame.name,\n status: frame.status,\n eventCount: frame.events.length,\n };\n}\n```\n\nThe handler validates input, retrieves the frame, and returns the summary with event count derived from the events array length.\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,32 +167,52 @@
167
167
  "criteria": {
168
168
  "has_delete_trigger": {
169
169
  "passed": false,
170
- "reason": "The output only describes/mentions the trigger but does not show the actual SQL code. No real trigger definition is provided."
170
+ "reason": "regex heuristic"
171
171
  },
172
172
  "uses_fts_delete_syntax": {
173
173
  "passed": false,
174
- "reason": "The correct FTS5 delete syntax is described in text but not shown in executable code form. Without actual code, the syntax cannot be verified."
174
+ "reason": "regex heuristic"
175
175
  },
176
176
  "references_old_row": {
177
177
  "passed": false,
178
- "reason": "The output mentions using 'old row values' but provides no actual code demonstrating the use of the OLD keyword in the trigger body."
178
+ "reason": "regex heuristic"
179
179
  },
180
180
  "matches_column_list": {
181
181
  "passed": false,
182
- "reason": "No column list is shown in the output. The AI does not provide code that demonstrates matching the column structure of the INSERT and UPDATE triggers."
182
+ "reason": "regex heuristic"
183
183
  }
184
184
  },
185
- "judgeMode": "llm",
186
- "duration": 29794,
187
- "output": "The missing DELETE trigger has been added following the same pattern as the UPDATE trigger:\n\n**Added:**\n- `frames_ad` (AFTER DELETE) trigger\n- Deletes the corresponding FTS5 entry when a frame is deleted from the frames table\n- Uses the special `'delete'` command with old row values to remove from the FTS5 index\n\nThe trigger follows the FTS5 external content pattern where `INSERT INTO frames_fts(frames_fts, ...) VALUES ('delete', ...)` removes entries from the index.\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
193
  "passed": false,
194
- "duration": 120017,
195
- "error": "claude timed out after 120000ms"
194
+ "passRate": 0,
195
+ "criteria": {
196
+ "clears_old_interval": {
197
+ "passed": false,
198
+ "reason": "regex heuristic"
199
+ },
200
+ "prevents_double_start": {
201
+ "passed": false,
202
+ "reason": "regex heuristic"
203
+ },
204
+ "has_getstate_method": {
205
+ "passed": false,
206
+ "reason": "regex heuristic"
207
+ },
208
+ "returns_correct_state_shape": {
209
+ "passed": false,
210
+ "reason": "regex heuristic"
211
+ }
212
+ },
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"
196
216
  }
197
217
  ]
198
218
  }