opencode-longrun-harness 1.2.22
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/LICENSE +21 -0
- package/README.md +390 -0
- package/docs/V1.2.20_EVIDENCE.md +114 -0
- package/docs/V1.2.21_EVIDENCE.md +68 -0
- package/docs/V1.2.22_EVIDENCE.md +52 -0
- package/harness/commissioning/README.md +16 -0
- package/harness/commissioning/inspect-copied-run.mjs +25 -0
- package/harness/commissioning/verify-copied-case.mjs +35 -0
- package/harness/plugin/longrun.js +677 -0
- package/harness/src/cli.mjs +40 -0
- package/harness/src/controller.js +1413 -0
- package/harness/src/evidence.mjs +135 -0
- package/harness/src/execution.mjs +217 -0
- package/harness/src/executor.mjs +21 -0
- package/harness/src/install.mjs +435 -0
- package/harness/src/maintenance.mjs +257 -0
- package/harness/src/memory.mjs +472 -0
- package/harness/test/candidates.test.mjs +73 -0
- package/harness/test/checkpoint.test.mjs +65 -0
- package/harness/test/controller.test.mjs +230 -0
- package/harness/test/evidence.test.mjs +57 -0
- package/harness/test/fixtures/durable-host.mjs +27 -0
- package/harness/test/fixtures/example-app-run.json +1375 -0
- package/harness/test/fixtures/notes-budget-exhausted-run.json +2070 -0
- package/harness/test/fixtures/notes-premature-complete-run.json +1496 -0
- package/harness/test/fixtures/notes-recovery-run.json +622 -0
- package/harness/test/fixtures/presets-readout-run.json +825 -0
- package/harness/test/fixtures/routing-worker.mjs +35 -0
- package/harness/test/fixtures/vitest-failed-receipt.json +33 -0
- package/harness/test/helper.mjs +41 -0
- package/harness/test/install.test.mjs +117 -0
- package/harness/test/lifecycle.test.mjs +102 -0
- package/harness/test/maintenance.test.mjs +204 -0
- package/harness/test/memory.test.mjs +145 -0
- package/harness/test/negative-control.test.mjs +91 -0
- package/harness/test/plugin.test.mjs +169 -0
- package/harness/test/recovery-runner.test.mjs +435 -0
- package/harness/test/recovery.test.mjs +68 -0
- package/harness/test/repair-mechanics.test.mjs +122 -0
- package/harness/test/toolbehavior.test.mjs +75 -0
- package/harness/test/v121-commissioning.test.mjs +177 -0
- package/harness/test/v1210-deadline.test.mjs +134 -0
- package/harness/test/v1211-pause.test.mjs +81 -0
- package/harness/test/v1212-maintenance-pause.test.mjs +76 -0
- package/harness/test/v1213-readout.test.mjs +82 -0
- package/harness/test/v1214-durable.test.mjs +121 -0
- package/harness/test/v1215-guidance.test.mjs +57 -0
- package/harness/test/v1216-test-summary.test.mjs +39 -0
- package/harness/test/v1217-discovery.test.mjs +73 -0
- package/harness/test/v1218-completion-review.test.mjs +203 -0
- package/harness/test/v1219-budget-pause.test.mjs +134 -0
- package/harness/test/v122-lifecycle-resolver.test.mjs +218 -0
- package/harness/test/v1220-budget-amendment.test.mjs +343 -0
- package/harness/test/v1221-negative-fixture-anchor.test.mjs +65 -0
- package/harness/test/v1222-default-evidence-class.test.mjs +75 -0
- package/harness/test/v123-plugin-e2e.test.mjs +120 -0
- package/harness/test/v123-receipt-model.test.mjs +185 -0
- package/harness/test/v124-canonical.test.mjs +147 -0
- package/harness/test/v124-installed.test.mjs +48 -0
- package/harness/test/v125-stability.test.mjs +183 -0
- package/harness/test/v126-execution.test.mjs +183 -0
- package/harness/test/v127-reconciliation.test.mjs +139 -0
- package/harness/test/v128-compaction.test.mjs +156 -0
- package/harness/test/v129-routing.test.mjs +165 -0
- package/harness/tools/audit-receipts.mjs +121 -0
- package/harness/tools/recovery-runner.mjs +499 -0
- package/package.json +49 -0
|
@@ -0,0 +1,825 @@
|
|
|
1
|
+
{
|
|
2
|
+
"runId": "lr-000000001a2b",
|
|
3
|
+
"status": "RECOVERY_REQUIRED",
|
|
4
|
+
"originalRequest": "Example App expansion: implement the requested feature end to end in this copy only, keep every existing subsystem and test intact, and prove the result with the declared checks.",
|
|
5
|
+
"contract": {
|
|
6
|
+
"criteria": [
|
|
7
|
+
{
|
|
8
|
+
"id": "presets-server",
|
|
9
|
+
"required": true,
|
|
10
|
+
"weight": 1,
|
|
11
|
+
"checks": [
|
|
12
|
+
"c-presets-server"
|
|
13
|
+
],
|
|
14
|
+
"evidenceClass": "INTEGRATION",
|
|
15
|
+
"visual": false,
|
|
16
|
+
"status": "FAIL"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "presets-e2e",
|
|
20
|
+
"required": true,
|
|
21
|
+
"weight": 1,
|
|
22
|
+
"checks": [
|
|
23
|
+
"c-presets-e2e"
|
|
24
|
+
],
|
|
25
|
+
"evidenceClass": "BROWSER",
|
|
26
|
+
"visual": false,
|
|
27
|
+
"status": "FAIL"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "regression-unit",
|
|
31
|
+
"required": true,
|
|
32
|
+
"weight": 1,
|
|
33
|
+
"checks": [
|
|
34
|
+
"c-default-unit"
|
|
35
|
+
],
|
|
36
|
+
"evidenceClass": "UNIT",
|
|
37
|
+
"visual": false,
|
|
38
|
+
"status": "FAIL"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "regression-browser",
|
|
42
|
+
"required": true,
|
|
43
|
+
"weight": 1,
|
|
44
|
+
"checks": [
|
|
45
|
+
"c-default-browser"
|
|
46
|
+
],
|
|
47
|
+
"evidenceClass": "BROWSER",
|
|
48
|
+
"visual": false,
|
|
49
|
+
"status": "FAIL"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"gates": [
|
|
53
|
+
{
|
|
54
|
+
"id": "c-typecheck",
|
|
55
|
+
"required": true,
|
|
56
|
+
"status": "FAIL"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "c-build",
|
|
60
|
+
"required": true,
|
|
61
|
+
"status": "FAIL"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"lossTarget": 0
|
|
65
|
+
},
|
|
66
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
67
|
+
"evaluatorHash": null,
|
|
68
|
+
"sourceFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
69
|
+
"loss": 1,
|
|
70
|
+
"budget": {
|
|
71
|
+
"iterations": 16,
|
|
72
|
+
"activeSeconds": 3600,
|
|
73
|
+
"deadlineSeconds": 14400,
|
|
74
|
+
"sameFailureLimit": 3,
|
|
75
|
+
"noProgressLimit": 5,
|
|
76
|
+
"autoDispatchCap": 40,
|
|
77
|
+
"toolActionCap": 90
|
|
78
|
+
},
|
|
79
|
+
"autoEnabled": false,
|
|
80
|
+
"runMode": "tracked",
|
|
81
|
+
"memoryStatus": "FRESH",
|
|
82
|
+
"state": {
|
|
83
|
+
"iterations": 0,
|
|
84
|
+
"noProgressStreak": 0,
|
|
85
|
+
"sameFailureStreak": 0,
|
|
86
|
+
"candidates": [
|
|
87
|
+
{
|
|
88
|
+
"n": 1,
|
|
89
|
+
"runId": "lr-000000001a2b",
|
|
90
|
+
"fingerprint": "9df02d5f20783ca7111d7f346aaa7359cec978f75e06b92da4e6158e9e4ab4f6",
|
|
91
|
+
"ts": 1789920110166,
|
|
92
|
+
"hypothesis": null,
|
|
93
|
+
"receiptIds": [
|
|
94
|
+
"receipt-1-b5a5f590b2df"
|
|
95
|
+
],
|
|
96
|
+
"criteriaChanged": [],
|
|
97
|
+
"lossBefore": 1,
|
|
98
|
+
"lossAfter": 1,
|
|
99
|
+
"bestLoss": null,
|
|
100
|
+
"result": "FAIL",
|
|
101
|
+
"diagnosticOnly": false,
|
|
102
|
+
"elapsedMs": 1246,
|
|
103
|
+
"counted": true,
|
|
104
|
+
"reason": "evaluated_new_source_state"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"n": 2,
|
|
108
|
+
"runId": "lr-000000001a2b",
|
|
109
|
+
"fingerprint": "c1e5143318bfa3d52619e52cdc2d669c50ee6e8d8079601165be61d713d2e80f",
|
|
110
|
+
"ts": 1789920237173,
|
|
111
|
+
"hypothesis": null,
|
|
112
|
+
"receiptIds": [
|
|
113
|
+
"receipt-2-ee73a0d31117"
|
|
114
|
+
],
|
|
115
|
+
"criteriaChanged": [],
|
|
116
|
+
"lossBefore": 1,
|
|
117
|
+
"lossAfter": 1,
|
|
118
|
+
"bestLoss": null,
|
|
119
|
+
"result": "FAIL",
|
|
120
|
+
"diagnosticOnly": false,
|
|
121
|
+
"elapsedMs": 1247,
|
|
122
|
+
"counted": true,
|
|
123
|
+
"reason": "evaluated_new_source_state"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"n": 3,
|
|
127
|
+
"runId": "lr-000000001a2b",
|
|
128
|
+
"fingerprint": "4f1c9fece491541c0ad22d81c7e20641472bb6d2b7d1e9babfd57d07118a1feb",
|
|
129
|
+
"ts": 1789920251996,
|
|
130
|
+
"hypothesis": null,
|
|
131
|
+
"receiptIds": [
|
|
132
|
+
"receipt-3-7133e9bfeea1"
|
|
133
|
+
],
|
|
134
|
+
"criteriaChanged": [],
|
|
135
|
+
"lossBefore": 1,
|
|
136
|
+
"lossAfter": 1,
|
|
137
|
+
"bestLoss": null,
|
|
138
|
+
"result": "PASS",
|
|
139
|
+
"diagnosticOnly": false,
|
|
140
|
+
"elapsedMs": 1115,
|
|
141
|
+
"counted": true,
|
|
142
|
+
"reason": "evaluated_new_source_state"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"n": 4,
|
|
146
|
+
"runId": "lr-000000001a2b",
|
|
147
|
+
"fingerprint": "ae59a7396b9150b3b38d52bf2af04acf20416cad4e3eb64d807b1817fcd9d710",
|
|
148
|
+
"ts": 1789921054420,
|
|
149
|
+
"hypothesis": null,
|
|
150
|
+
"receiptIds": [
|
|
151
|
+
"receipt-5-463eb413932b"
|
|
152
|
+
],
|
|
153
|
+
"criteriaChanged": [
|
|
154
|
+
"presets-e2e"
|
|
155
|
+
],
|
|
156
|
+
"lossBefore": 1,
|
|
157
|
+
"lossAfter": 1,
|
|
158
|
+
"bestLoss": 1,
|
|
159
|
+
"result": "FAIL",
|
|
160
|
+
"diagnosticOnly": false,
|
|
161
|
+
"elapsedMs": 16289,
|
|
162
|
+
"counted": true,
|
|
163
|
+
"reason": "evaluated_new_source_state"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"n": 5,
|
|
167
|
+
"runId": "lr-000000001a2b",
|
|
168
|
+
"fingerprint": "27c2f530d79714abfec09024294f6eb2092a52554ed5e817eca3134bf2f496d8",
|
|
169
|
+
"ts": 1789921290376,
|
|
170
|
+
"hypothesis": null,
|
|
171
|
+
"receiptIds": [
|
|
172
|
+
"receipt-6-60cc3d29ecfe"
|
|
173
|
+
],
|
|
174
|
+
"criteriaChanged": [
|
|
175
|
+
"presets-e2e"
|
|
176
|
+
],
|
|
177
|
+
"lossBefore": 1,
|
|
178
|
+
"lossAfter": 0.75,
|
|
179
|
+
"bestLoss": 1,
|
|
180
|
+
"result": "PASS",
|
|
181
|
+
"diagnosticOnly": false,
|
|
182
|
+
"elapsedMs": 5819,
|
|
183
|
+
"counted": true,
|
|
184
|
+
"reason": "evaluated_new_source_state"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"n": 6,
|
|
188
|
+
"runId": "lr-000000001a2b",
|
|
189
|
+
"fingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
190
|
+
"ts": 1789921358408,
|
|
191
|
+
"hypothesis": null,
|
|
192
|
+
"receiptIds": [
|
|
193
|
+
"receipt-8-05a4d303046a"
|
|
194
|
+
],
|
|
195
|
+
"criteriaChanged": [],
|
|
196
|
+
"lossBefore": 1,
|
|
197
|
+
"lossAfter": 1,
|
|
198
|
+
"bestLoss": 0.75,
|
|
199
|
+
"result": "PASS",
|
|
200
|
+
"diagnosticOnly": false,
|
|
201
|
+
"elapsedMs": 1066,
|
|
202
|
+
"counted": true,
|
|
203
|
+
"reason": "evaluated_new_source_state"
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
"lastEvalFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
207
|
+
"memoryNodes": [
|
|
208
|
+
"AGENTS.md"
|
|
209
|
+
],
|
|
210
|
+
"current": {
|
|
211
|
+
"n": 6,
|
|
212
|
+
"runId": "lr-000000001a2b",
|
|
213
|
+
"fingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
214
|
+
"ts": 1789921358408,
|
|
215
|
+
"hypothesis": null,
|
|
216
|
+
"receiptIds": [
|
|
217
|
+
"receipt-8-05a4d303046a"
|
|
218
|
+
],
|
|
219
|
+
"criteriaChanged": [],
|
|
220
|
+
"lossBefore": 1,
|
|
221
|
+
"lossAfter": 1,
|
|
222
|
+
"bestLoss": 0.75,
|
|
223
|
+
"result": "PASS",
|
|
224
|
+
"diagnosticOnly": false,
|
|
225
|
+
"elapsedMs": 1066,
|
|
226
|
+
"counted": true,
|
|
227
|
+
"reason": "evaluated_new_source_state"
|
|
228
|
+
},
|
|
229
|
+
"best": {
|
|
230
|
+
"n": 5,
|
|
231
|
+
"runId": "lr-000000001a2b",
|
|
232
|
+
"fingerprint": "27c2f530d79714abfec09024294f6eb2092a52554ed5e817eca3134bf2f496d8",
|
|
233
|
+
"ts": 1789921290376,
|
|
234
|
+
"hypothesis": null,
|
|
235
|
+
"receiptIds": [
|
|
236
|
+
"receipt-6-60cc3d29ecfe"
|
|
237
|
+
],
|
|
238
|
+
"criteriaChanged": [
|
|
239
|
+
"presets-e2e"
|
|
240
|
+
],
|
|
241
|
+
"lossBefore": 1,
|
|
242
|
+
"lossAfter": 0.75,
|
|
243
|
+
"bestLoss": 1,
|
|
244
|
+
"result": "PASS",
|
|
245
|
+
"diagnosticOnly": false,
|
|
246
|
+
"elapsedMs": 5819,
|
|
247
|
+
"counted": true,
|
|
248
|
+
"reason": "evaluated_new_source_state"
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
"receipts": [
|
|
252
|
+
{
|
|
253
|
+
"checkId": "c-typecheck",
|
|
254
|
+
"command": "npx tsc -p tsconfig.json --noEmit",
|
|
255
|
+
"status": "FAIL",
|
|
256
|
+
"exitCode": 2,
|
|
257
|
+
"testCount": null,
|
|
258
|
+
"startedAt": 1789920108894,
|
|
259
|
+
"finishedAt": 1789920110140,
|
|
260
|
+
"versions": {
|
|
261
|
+
"node": "v24.3.0"
|
|
262
|
+
},
|
|
263
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
264
|
+
"evaluatorHash": null,
|
|
265
|
+
"sourceFingerprint": "9df02d5f20783ca7111d7f346aaa7359cec978f75e06b92da4e6158e9e4ab4f6",
|
|
266
|
+
"fingerprintSchemaVersion": 2,
|
|
267
|
+
"fpScope": "project",
|
|
268
|
+
"evidenceClass": "STATIC",
|
|
269
|
+
"class": "STATIC",
|
|
270
|
+
"proxyOnly": false,
|
|
271
|
+
"argv": [
|
|
272
|
+
"npx",
|
|
273
|
+
"tsc",
|
|
274
|
+
"-p",
|
|
275
|
+
"tsconfig.json",
|
|
276
|
+
"--noEmit"
|
|
277
|
+
],
|
|
278
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
279
|
+
"terminationReason": null,
|
|
280
|
+
"executionError": null,
|
|
281
|
+
"executionToken": "fd488f22-af55-4d4b-aed3-d7db81d34f12"
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"checkId": "c-typecheck",
|
|
285
|
+
"command": "npx tsc -p tsconfig.json --noEmit",
|
|
286
|
+
"status": "FAIL",
|
|
287
|
+
"exitCode": 2,
|
|
288
|
+
"testCount": null,
|
|
289
|
+
"startedAt": 1789920235903,
|
|
290
|
+
"finishedAt": 1789920237150,
|
|
291
|
+
"versions": {
|
|
292
|
+
"node": "v24.3.0"
|
|
293
|
+
},
|
|
294
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
295
|
+
"evaluatorHash": null,
|
|
296
|
+
"sourceFingerprint": "c1e5143318bfa3d52619e52cdc2d669c50ee6e8d8079601165be61d713d2e80f",
|
|
297
|
+
"fingerprintSchemaVersion": 2,
|
|
298
|
+
"fpScope": "project",
|
|
299
|
+
"evidenceClass": "STATIC",
|
|
300
|
+
"class": "STATIC",
|
|
301
|
+
"proxyOnly": false,
|
|
302
|
+
"argv": [
|
|
303
|
+
"npx",
|
|
304
|
+
"tsc",
|
|
305
|
+
"-p",
|
|
306
|
+
"tsconfig.json",
|
|
307
|
+
"--noEmit"
|
|
308
|
+
],
|
|
309
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
310
|
+
"terminationReason": null,
|
|
311
|
+
"executionError": null,
|
|
312
|
+
"executionToken": "4bfa26b3-dd9a-4568-8190-7e54dc7c4fed"
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"checkId": "c-typecheck",
|
|
316
|
+
"command": "npx tsc -p tsconfig.json --noEmit",
|
|
317
|
+
"status": "PASS",
|
|
318
|
+
"exitCode": 0,
|
|
319
|
+
"testCount": null,
|
|
320
|
+
"startedAt": 1789920250859,
|
|
321
|
+
"finishedAt": 1789920251974,
|
|
322
|
+
"versions": {
|
|
323
|
+
"node": "v24.3.0"
|
|
324
|
+
},
|
|
325
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
326
|
+
"evaluatorHash": null,
|
|
327
|
+
"sourceFingerprint": "4f1c9fece491541c0ad22d81c7e20641472bb6d2b7d1e9babfd57d07118a1feb",
|
|
328
|
+
"fingerprintSchemaVersion": 2,
|
|
329
|
+
"fpScope": "project",
|
|
330
|
+
"evidenceClass": "STATIC",
|
|
331
|
+
"class": "STATIC",
|
|
332
|
+
"proxyOnly": false,
|
|
333
|
+
"argv": [
|
|
334
|
+
"npx",
|
|
335
|
+
"tsc",
|
|
336
|
+
"-p",
|
|
337
|
+
"tsconfig.json",
|
|
338
|
+
"--noEmit"
|
|
339
|
+
],
|
|
340
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
341
|
+
"terminationReason": null,
|
|
342
|
+
"executionError": null,
|
|
343
|
+
"executionToken": "1bd81743-011c-4ecf-a49e-72084aaabbc4"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"checkId": "c-presets-server",
|
|
347
|
+
"command": "npx vitest run packages/server/test/presets.test.ts",
|
|
348
|
+
"status": "PASS",
|
|
349
|
+
"exitCode": 0,
|
|
350
|
+
"testCount": 11,
|
|
351
|
+
"startedAt": 1789920262097,
|
|
352
|
+
"finishedAt": 1789920263296,
|
|
353
|
+
"versions": {
|
|
354
|
+
"node": "v24.3.0"
|
|
355
|
+
},
|
|
356
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
357
|
+
"evaluatorHash": null,
|
|
358
|
+
"sourceFingerprint": "4f1c9fece491541c0ad22d81c7e20641472bb6d2b7d1e9babfd57d07118a1feb",
|
|
359
|
+
"fingerprintSchemaVersion": 2,
|
|
360
|
+
"fpScope": "project",
|
|
361
|
+
"evidenceClass": "INTEGRATION",
|
|
362
|
+
"class": "INTEGRATION",
|
|
363
|
+
"proxyOnly": false,
|
|
364
|
+
"argv": [
|
|
365
|
+
"npx",
|
|
366
|
+
"vitest",
|
|
367
|
+
"run",
|
|
368
|
+
"packages/server/test/presets.test.ts"
|
|
369
|
+
],
|
|
370
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
371
|
+
"terminationReason": null,
|
|
372
|
+
"executionError": null,
|
|
373
|
+
"executionToken": "ba21644b-8dd5-4782-a4be-7fcbc8fcea72"
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"checkId": "c-presets-e2e",
|
|
377
|
+
"command": "npx playwright test --config playwright.presets.config.ts",
|
|
378
|
+
"status": "FAIL",
|
|
379
|
+
"exitCode": 1,
|
|
380
|
+
"testCount": 5,
|
|
381
|
+
"startedAt": 1789921038075,
|
|
382
|
+
"finishedAt": 1789921054364,
|
|
383
|
+
"versions": {
|
|
384
|
+
"node": "v24.3.0"
|
|
385
|
+
},
|
|
386
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
387
|
+
"evaluatorHash": null,
|
|
388
|
+
"sourceFingerprint": "ae59a7396b9150b3b38d52bf2af04acf20416cad4e3eb64d807b1817fcd9d710",
|
|
389
|
+
"fingerprintSchemaVersion": 2,
|
|
390
|
+
"fpScope": "project",
|
|
391
|
+
"evidenceClass": "BROWSER",
|
|
392
|
+
"class": "BROWSER",
|
|
393
|
+
"proxyOnly": false,
|
|
394
|
+
"argv": [
|
|
395
|
+
"npx",
|
|
396
|
+
"playwright",
|
|
397
|
+
"test",
|
|
398
|
+
"--config",
|
|
399
|
+
"playwright.presets.config.ts"
|
|
400
|
+
],
|
|
401
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
402
|
+
"terminationReason": null,
|
|
403
|
+
"executionError": null,
|
|
404
|
+
"executionToken": "9a9d51ff-f7b8-4235-9849-4e709ed707f9"
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
"checkId": "c-presets-e2e",
|
|
408
|
+
"command": "npx playwright test --config playwright.presets.config.ts",
|
|
409
|
+
"status": "PASS",
|
|
410
|
+
"exitCode": 0,
|
|
411
|
+
"testCount": 8,
|
|
412
|
+
"startedAt": 1789921284536,
|
|
413
|
+
"finishedAt": 1789921290355,
|
|
414
|
+
"versions": {
|
|
415
|
+
"node": "v24.3.0"
|
|
416
|
+
},
|
|
417
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
418
|
+
"evaluatorHash": null,
|
|
419
|
+
"sourceFingerprint": "27c2f530d79714abfec09024294f6eb2092a52554ed5e817eca3134bf2f496d8",
|
|
420
|
+
"fingerprintSchemaVersion": 2,
|
|
421
|
+
"fpScope": "project",
|
|
422
|
+
"evidenceClass": "BROWSER",
|
|
423
|
+
"class": "BROWSER",
|
|
424
|
+
"proxyOnly": false,
|
|
425
|
+
"argv": [
|
|
426
|
+
"npx",
|
|
427
|
+
"playwright",
|
|
428
|
+
"test",
|
|
429
|
+
"--config",
|
|
430
|
+
"playwright.presets.config.ts"
|
|
431
|
+
],
|
|
432
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
433
|
+
"terminationReason": null,
|
|
434
|
+
"executionError": null,
|
|
435
|
+
"executionToken": "d4a87866-fd54-493e-8d29-8defc3466edb"
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"checkId": "c-typecheck",
|
|
439
|
+
"command": "npx tsc -p tsconfig.json --noEmit",
|
|
440
|
+
"status": "FAIL",
|
|
441
|
+
"exitCode": 2,
|
|
442
|
+
"testCount": null,
|
|
443
|
+
"startedAt": 1789921320324,
|
|
444
|
+
"finishedAt": 1789921321413,
|
|
445
|
+
"versions": {
|
|
446
|
+
"node": "v24.3.0"
|
|
447
|
+
},
|
|
448
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
449
|
+
"evaluatorHash": null,
|
|
450
|
+
"sourceFingerprint": "27c2f530d79714abfec09024294f6eb2092a52554ed5e817eca3134bf2f496d8",
|
|
451
|
+
"fingerprintSchemaVersion": 2,
|
|
452
|
+
"fpScope": "project",
|
|
453
|
+
"evidenceClass": "STATIC",
|
|
454
|
+
"class": "STATIC",
|
|
455
|
+
"proxyOnly": false,
|
|
456
|
+
"argv": [
|
|
457
|
+
"npx",
|
|
458
|
+
"tsc",
|
|
459
|
+
"-p",
|
|
460
|
+
"tsconfig.json",
|
|
461
|
+
"--noEmit"
|
|
462
|
+
],
|
|
463
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
464
|
+
"terminationReason": null,
|
|
465
|
+
"executionError": null,
|
|
466
|
+
"executionToken": "6dc9705e-655a-48b3-a000-002c1fbf9568"
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"checkId": "c-typecheck",
|
|
470
|
+
"command": "npx tsc -p tsconfig.json --noEmit",
|
|
471
|
+
"status": "PASS",
|
|
472
|
+
"exitCode": 0,
|
|
473
|
+
"testCount": null,
|
|
474
|
+
"startedAt": 1789921357323,
|
|
475
|
+
"finishedAt": 1789921358389,
|
|
476
|
+
"versions": {
|
|
477
|
+
"node": "v24.3.0"
|
|
478
|
+
},
|
|
479
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
480
|
+
"evaluatorHash": null,
|
|
481
|
+
"sourceFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
482
|
+
"fingerprintSchemaVersion": 2,
|
|
483
|
+
"fpScope": "project",
|
|
484
|
+
"evidenceClass": "STATIC",
|
|
485
|
+
"class": "STATIC",
|
|
486
|
+
"proxyOnly": false,
|
|
487
|
+
"argv": [
|
|
488
|
+
"npx",
|
|
489
|
+
"tsc",
|
|
490
|
+
"-p",
|
|
491
|
+
"tsconfig.json",
|
|
492
|
+
"--noEmit"
|
|
493
|
+
],
|
|
494
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
495
|
+
"terminationReason": null,
|
|
496
|
+
"executionError": null,
|
|
497
|
+
"executionToken": "288ec93e-ee17-40ce-b241-7969a2662bfb"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"checkId": "c-build",
|
|
501
|
+
"command": "npm run build -w @sb/web",
|
|
502
|
+
"status": "PASS",
|
|
503
|
+
"exitCode": 0,
|
|
504
|
+
"testCount": null,
|
|
505
|
+
"startedAt": 1789921364129,
|
|
506
|
+
"finishedAt": 1789921365227,
|
|
507
|
+
"versions": {
|
|
508
|
+
"node": "v24.3.0"
|
|
509
|
+
},
|
|
510
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
511
|
+
"evaluatorHash": null,
|
|
512
|
+
"sourceFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
513
|
+
"fingerprintSchemaVersion": 2,
|
|
514
|
+
"fpScope": "project",
|
|
515
|
+
"evidenceClass": "STATIC",
|
|
516
|
+
"class": "STATIC",
|
|
517
|
+
"proxyOnly": false,
|
|
518
|
+
"argv": [
|
|
519
|
+
"npm",
|
|
520
|
+
"run",
|
|
521
|
+
"build",
|
|
522
|
+
"-w",
|
|
523
|
+
"@sb/web"
|
|
524
|
+
],
|
|
525
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
526
|
+
"terminationReason": null,
|
|
527
|
+
"executionError": null,
|
|
528
|
+
"executionToken": "99e6c36b-f8fa-48d2-8618-5b38d532a757"
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"checkId": "c-presets-server",
|
|
532
|
+
"command": "npx vitest run packages/server/test/presets.test.ts",
|
|
533
|
+
"status": "PASS",
|
|
534
|
+
"exitCode": 0,
|
|
535
|
+
"testCount": 11,
|
|
536
|
+
"startedAt": 1789921380350,
|
|
537
|
+
"finishedAt": 1789921381393,
|
|
538
|
+
"versions": {
|
|
539
|
+
"node": "v24.3.0"
|
|
540
|
+
},
|
|
541
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
542
|
+
"evaluatorHash": null,
|
|
543
|
+
"sourceFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
544
|
+
"fingerprintSchemaVersion": 2,
|
|
545
|
+
"fpScope": "project",
|
|
546
|
+
"evidenceClass": "INTEGRATION",
|
|
547
|
+
"class": "INTEGRATION",
|
|
548
|
+
"proxyOnly": false,
|
|
549
|
+
"argv": [
|
|
550
|
+
"npx",
|
|
551
|
+
"vitest",
|
|
552
|
+
"run",
|
|
553
|
+
"packages/server/test/presets.test.ts"
|
|
554
|
+
],
|
|
555
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
556
|
+
"terminationReason": null,
|
|
557
|
+
"executionError": null,
|
|
558
|
+
"executionToken": "713df509-4ebd-4a8a-a855-954e8499d277"
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
"checkId": "c-default-unit",
|
|
562
|
+
"command": "npx vitest run",
|
|
563
|
+
"status": "PASS",
|
|
564
|
+
"exitCode": 0,
|
|
565
|
+
"testCount": 96,
|
|
566
|
+
"startedAt": 1789921389587,
|
|
567
|
+
"finishedAt": 1789921390616,
|
|
568
|
+
"versions": {
|
|
569
|
+
"node": "v24.3.0"
|
|
570
|
+
},
|
|
571
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
572
|
+
"evaluatorHash": null,
|
|
573
|
+
"sourceFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
574
|
+
"fingerprintSchemaVersion": 2,
|
|
575
|
+
"fpScope": "project",
|
|
576
|
+
"evidenceClass": "UNIT",
|
|
577
|
+
"class": "UNIT",
|
|
578
|
+
"proxyOnly": false,
|
|
579
|
+
"argv": [
|
|
580
|
+
"npx",
|
|
581
|
+
"vitest",
|
|
582
|
+
"run"
|
|
583
|
+
],
|
|
584
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
585
|
+
"terminationReason": null,
|
|
586
|
+
"executionError": null,
|
|
587
|
+
"executionToken": "f0533d8e-49a9-4e06-86cd-99bd0c2932fb"
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"checkId": "c-presets-e2e",
|
|
591
|
+
"command": "npx playwright test --config playwright.presets.config.ts",
|
|
592
|
+
"status": "PASS",
|
|
593
|
+
"exitCode": 0,
|
|
594
|
+
"testCount": 8,
|
|
595
|
+
"startedAt": 1789921398976,
|
|
596
|
+
"finishedAt": 1789921404608,
|
|
597
|
+
"versions": {
|
|
598
|
+
"node": "v24.3.0"
|
|
599
|
+
},
|
|
600
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
601
|
+
"evaluatorHash": null,
|
|
602
|
+
"sourceFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
603
|
+
"fingerprintSchemaVersion": 2,
|
|
604
|
+
"fpScope": "project",
|
|
605
|
+
"evidenceClass": "BROWSER",
|
|
606
|
+
"class": "BROWSER",
|
|
607
|
+
"proxyOnly": false,
|
|
608
|
+
"argv": [
|
|
609
|
+
"npx",
|
|
610
|
+
"playwright",
|
|
611
|
+
"test",
|
|
612
|
+
"--config",
|
|
613
|
+
"playwright.presets.config.ts"
|
|
614
|
+
],
|
|
615
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
616
|
+
"terminationReason": null,
|
|
617
|
+
"executionError": null,
|
|
618
|
+
"executionToken": "9d8a48e6-8d1b-4723-94fa-7d6ab84b9374"
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"checkId": "c-default-browser",
|
|
622
|
+
"command": "npx playwright test",
|
|
623
|
+
"status": "PASS",
|
|
624
|
+
"exitCode": 0,
|
|
625
|
+
"testCount": 34,
|
|
626
|
+
"startedAt": 1789921416118,
|
|
627
|
+
"finishedAt": 1789921519225,
|
|
628
|
+
"versions": {
|
|
629
|
+
"node": "v24.3.0"
|
|
630
|
+
},
|
|
631
|
+
"contractHash": "c1f33b88e2fc57a3bcb69ef08e9eaea5bf9c7c8ece8cc206a51ce555ba0a6dd1",
|
|
632
|
+
"evaluatorHash": null,
|
|
633
|
+
"sourceFingerprint": "5cecaed62f5ea5ad225ffb6a73e7544170a1ed6b307128b7ea0f42754d06a39a",
|
|
634
|
+
"fingerprintSchemaVersion": 2,
|
|
635
|
+
"fpScope": "project",
|
|
636
|
+
"evidenceClass": "BROWSER",
|
|
637
|
+
"class": "BROWSER",
|
|
638
|
+
"proxyOnly": false,
|
|
639
|
+
"argv": [
|
|
640
|
+
"npx",
|
|
641
|
+
"playwright",
|
|
642
|
+
"test"
|
|
643
|
+
],
|
|
644
|
+
"outputTail": "command completed; the recorded status and exit code are the evidence.",
|
|
645
|
+
"terminationReason": null,
|
|
646
|
+
"executionError": null,
|
|
647
|
+
"executionToken": "a5941854-8808-4f0a-ab12-6eb718131dab"
|
|
648
|
+
}
|
|
649
|
+
],
|
|
650
|
+
"faults": [],
|
|
651
|
+
"execution": {
|
|
652
|
+
"schemaVersion": 1,
|
|
653
|
+
"since": 1789917710927,
|
|
654
|
+
"historicalUsageUnknown": false,
|
|
655
|
+
"verificationMs": 140979,
|
|
656
|
+
"commandAttempts": 13,
|
|
657
|
+
"inFlight": null
|
|
658
|
+
},
|
|
659
|
+
"directory": "/home/example/project",
|
|
660
|
+
"checkCatalogue": {
|
|
661
|
+
"c-presets-server": {
|
|
662
|
+
"command": [
|
|
663
|
+
"npx",
|
|
664
|
+
"vitest",
|
|
665
|
+
"run",
|
|
666
|
+
"packages/server/test/presets.test.ts"
|
|
667
|
+
],
|
|
668
|
+
"kind": "test",
|
|
669
|
+
"integration": true,
|
|
670
|
+
"negativeControl": true,
|
|
671
|
+
"timeoutMs": 180000
|
|
672
|
+
},
|
|
673
|
+
"c-presets-e2e": {
|
|
674
|
+
"command": [
|
|
675
|
+
"npx",
|
|
676
|
+
"playwright",
|
|
677
|
+
"test",
|
|
678
|
+
"--config",
|
|
679
|
+
"playwright.presets.config.ts"
|
|
680
|
+
],
|
|
681
|
+
"kind": "test",
|
|
682
|
+
"integration": true,
|
|
683
|
+
"negativeControl": true,
|
|
684
|
+
"timeoutMs": 360000
|
|
685
|
+
},
|
|
686
|
+
"c-default-unit": {
|
|
687
|
+
"command": [
|
|
688
|
+
"npx",
|
|
689
|
+
"vitest",
|
|
690
|
+
"run"
|
|
691
|
+
],
|
|
692
|
+
"kind": "test",
|
|
693
|
+
"timeoutMs": 180000
|
|
694
|
+
},
|
|
695
|
+
"c-default-browser": {
|
|
696
|
+
"command": [
|
|
697
|
+
"npx",
|
|
698
|
+
"playwright",
|
|
699
|
+
"test"
|
|
700
|
+
],
|
|
701
|
+
"kind": "test",
|
|
702
|
+
"timeoutMs": 600000
|
|
703
|
+
},
|
|
704
|
+
"c-typecheck": {
|
|
705
|
+
"command": [
|
|
706
|
+
"npx",
|
|
707
|
+
"tsc",
|
|
708
|
+
"-p",
|
|
709
|
+
"tsconfig.json",
|
|
710
|
+
"--noEmit"
|
|
711
|
+
],
|
|
712
|
+
"kind": "cmd",
|
|
713
|
+
"gate": true,
|
|
714
|
+
"timeoutMs": 180000
|
|
715
|
+
},
|
|
716
|
+
"c-build": {
|
|
717
|
+
"command": [
|
|
718
|
+
"npm",
|
|
719
|
+
"run",
|
|
720
|
+
"build",
|
|
721
|
+
"-w",
|
|
722
|
+
"@sb/web"
|
|
723
|
+
],
|
|
724
|
+
"kind": "cmd",
|
|
725
|
+
"gate": true,
|
|
726
|
+
"timeoutMs": 240000
|
|
727
|
+
}
|
|
728
|
+
},
|
|
729
|
+
"createdAt": 1789917710927,
|
|
730
|
+
"compactionSessionID": "ses_f409adba2ffeezgMJmYUfOmTgi",
|
|
731
|
+
"agentProgressHistory": [
|
|
732
|
+
{
|
|
733
|
+
"schemaVersion": 1,
|
|
734
|
+
"revision": 1,
|
|
735
|
+
"at": 1789917722210,
|
|
736
|
+
"sessionID": "ses_f409adba2ffeezgMJmYUfOmTgi",
|
|
737
|
+
"sourceFingerprint": "59c8a4c2236a4bcb65f27cd0075cb63ea90321a42689e7dd50e33749d5d870be",
|
|
738
|
+
"fields": {
|
|
739
|
+
"currentSlice": "Implement and verify the requested feature.",
|
|
740
|
+
"nextAction": "Continue the declared checks one at a time and record each with longrun_verify.",
|
|
741
|
+
"decisions": [
|
|
742
|
+
"Preset=stable server id,name(trimmed 1..40),mission 0..2,seed 0..4294967295(ZERO must reach game unchanged),revision int.",
|
|
743
|
+
"API /api/presets: GET list, GET one, POST create, PUT update, DELETE; stale revision update/delete->409 no lost update; unknown valid id->404; malformed id/types/range/JSON->400; storage failure->500 not empty.",
|
|
744
|
+
"Storage: new table presets in SAME file DB via idempotent CREATE TABLE IF NOT EXISTS; must preserve leaderboard rows; parameterized statements only.",
|
|
745
|
+
"Duplicate trimmed name ->409 without overwrite (unique index on trimmed name).",
|
|
746
|
+
"UI: new Presets screen from title; launch sets ui.campaign={mission,seed} from server-returned values then briefing->GameCanvas (real sim), not a shim; editing presets never writes campaign SAVE_KEY.",
|
|
747
|
+
"Separate e2e-presets/ + playwright.presets.config.ts: web5399/server8999, isolated file DB, vite proxy->8999, strictPort, reuseExistingServer:false, 127.0.0.1 only; default playwright.config.ts switched to refuse reused servers (retain 34 tests/12 files)."
|
|
748
|
+
],
|
|
749
|
+
"failedHypotheses": [],
|
|
750
|
+
"memoryNodes": [
|
|
751
|
+
"server makeHandler + node:sqlite DatabaseSync in leaderboard.ts is the pattern to extend",
|
|
752
|
+
"App.tsx title screen + GameScreen pass campaign.mission/seed to GameCanvas; seedFromUrl uses >>>0"
|
|
753
|
+
],
|
|
754
|
+
"artifacts": [
|
|
755
|
+
"packages/server/src/presets.ts",
|
|
756
|
+
"packages/server/test/presets.test.ts",
|
|
757
|
+
"packages/web/src",
|
|
758
|
+
"e2e-presets",
|
|
759
|
+
"playwright.presets.config.ts"
|
|
760
|
+
]
|
|
761
|
+
}
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
"schemaVersion": 1,
|
|
765
|
+
"revision": 2,
|
|
766
|
+
"at": 1789920294405,
|
|
767
|
+
"sessionID": "ses_f409adba2ffeezgMJmYUfOmTgi",
|
|
768
|
+
"sourceFingerprint": "4f1c9fece491541c0ad22d81c7e20641472bb6d2b7d1e9babfd57d07118a1feb",
|
|
769
|
+
"fields": {
|
|
770
|
+
"currentSlice": "Implement and verify the requested feature.",
|
|
771
|
+
"nextAction": "Continue the declared checks one at a time and record each with longrun_verify.",
|
|
772
|
+
"decisions": [
|
|
773
|
+
"c-presets-server restart test PASSED via native verify (INTEGRATION, 11 tests) \u2014 real two-process same-port restart, not wrapper kill.",
|
|
774
|
+
"Process ownership rule: spawn child directly (not npx/tsx wrapper), await ACTUAL exit, timeout must FAIL cleanup, verify port released, refuse occupied port, never kill unrelated listeners.",
|
|
775
|
+
"Masked-exit rule: never pipe to head/tail then echo $?; run declared checks only via longrun_verify."
|
|
776
|
+
],
|
|
777
|
+
"failedHypotheses": [
|
|
778
|
+
"<example hypothesis redacted>"
|
|
779
|
+
],
|
|
780
|
+
"memoryNodes": [
|
|
781
|
+
"server makeHandler + node:sqlite DatabaseSync in leaderboard.ts is the pattern to extend",
|
|
782
|
+
"App.tsx title screen + GameScreen pass campaign.mission/seed to GameCanvas; seedFromUrl uses >>>0"
|
|
783
|
+
],
|
|
784
|
+
"artifacts": [
|
|
785
|
+
"packages/server/src/presets.ts",
|
|
786
|
+
"packages/server/test/presets.test.ts",
|
|
787
|
+
"packages/web/src",
|
|
788
|
+
"e2e-presets",
|
|
789
|
+
"playwright.presets.config.ts"
|
|
790
|
+
]
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
],
|
|
794
|
+
"agentProgress": {
|
|
795
|
+
"schemaVersion": 1,
|
|
796
|
+
"revision": 2,
|
|
797
|
+
"at": 1789920294405,
|
|
798
|
+
"sessionID": "ses_f409adba2ffeezgMJmYUfOmTgi",
|
|
799
|
+
"sourceFingerprint": "4f1c9fece491541c0ad22d81c7e20641472bb6d2b7d1e9babfd57d07118a1feb",
|
|
800
|
+
"fields": {
|
|
801
|
+
"currentSlice": "Implement and verify the requested feature.",
|
|
802
|
+
"nextAction": "Continue the declared checks one at a time and record each with longrun_verify.",
|
|
803
|
+
"decisions": [
|
|
804
|
+
"c-presets-server restart test PASSED via native verify (INTEGRATION, 11 tests) \u2014 real two-process same-port restart, not wrapper kill.",
|
|
805
|
+
"Process ownership rule: spawn child directly (not npx/tsx wrapper), await ACTUAL exit, timeout must FAIL cleanup, verify port released, refuse occupied port, never kill unrelated listeners.",
|
|
806
|
+
"Masked-exit rule: never pipe to head/tail then echo $?; run declared checks only via longrun_verify."
|
|
807
|
+
],
|
|
808
|
+
"failedHypotheses": [
|
|
809
|
+
"<example hypothesis redacted>"
|
|
810
|
+
],
|
|
811
|
+
"memoryNodes": [
|
|
812
|
+
"server makeHandler + node:sqlite DatabaseSync in leaderboard.ts is the pattern to extend",
|
|
813
|
+
"App.tsx title screen + GameScreen pass campaign.mission/seed to GameCanvas; seedFromUrl uses >>>0"
|
|
814
|
+
],
|
|
815
|
+
"artifacts": [
|
|
816
|
+
"packages/server/src/presets.ts",
|
|
817
|
+
"packages/server/test/presets.test.ts",
|
|
818
|
+
"packages/web/src",
|
|
819
|
+
"e2e-presets",
|
|
820
|
+
"playwright.presets.config.ts"
|
|
821
|
+
]
|
|
822
|
+
}
|
|
823
|
+
},
|
|
824
|
+
"controlGeneration": 2
|
|
825
|
+
}
|