carlos / todomvc-bakeoff Public

Clone
git clone https://amadan.net/carlos/todomvc-bakeoff

Plain git — no account needed to clone.

Download

Download this file

1{
2 "Slug": "swift",
3 "Language": "Swift",
4 "Status": "LIVE",
5 "URL": "https://todo-swift-2.bfj.oncarlos.com",
6 "Version": "b59ac55",
7 "Stack": "",
8 "Source": "https://amadan.net/carlos/todomvc-bakeoff?ref=main\u0026path=apps/swift",
9 "BehaviourJSOn": {
10 "Passed": 35,
11 "Failed": 0,
12 "Skipped": 0
13 },
14 "BehaviourJSOff": {
15 "Passed": 32,
16 "Failed": 0,
17 "Skipped": 3
18 },
19 "TTFBEmpty": {
20 "N": 30,
21 "P50": 58.706,
22 "P95": 66.484,
23 "P99": 75.791,
24 "Min": 49.085,
25 "Max": 75.791
26 },
27 "TTFB50": {
28 "N": 30,
29 "P50": 56.312,
30 "P95": 61.926,
31 "P99": 63.425,
32 "Min": 47.876,
33 "Max": 63.425
34 },
35 "Wake": [
36 1292.925,
37 1571.985,
38 1445.064
39 ],
40 "Load": [
41 {
42 "Scenario": "read",
43 "Concurrency": 1,
44 "RPS": 62.0924958672952,
45 "P50Ms": 16.085201,
46 "P95Ms": 21.323919,
47 "P99Ms": 25.819993,
48 "ErrorRate": 0,
49 "Status": {
50 "200": 620
51 }
52 },
53 {
54 "Scenario": "read",
55 "Concurrency": 2,
56 "RPS": 137.9826535107139,
57 "P50Ms": 13.746804,
58 "P95Ms": 19.8949,
59 "P99Ms": 23.4948,
60 "ErrorRate": 0,
61 "Status": {
62 "200": 1378
63 }
64 },
65 {
66 "Scenario": "read",
67 "Concurrency": 4,
68 "RPS": 102.88624191797862,
69 "P50Ms": 37.969286,
70 "P95Ms": 45.995428999999994,
71 "P99Ms": 62.940053999999996,
72 "ErrorRate": 0,
73 "Status": {
74 "200": 1025
75 }
76 },
77 {
78 "Scenario": "read",
79 "Concurrency": 8,
80 "RPS": 195.1791877504414,
81 "P50Ms": 39.65168,
82 "P95Ms": 48.991596,
83 "P99Ms": 61.681878000000005,
84 "ErrorRate": 0,
85 "Status": {
86 "200": 1944
87 }
88 },
89 {
90 "Scenario": "read",
91 "Concurrency": 16,
92 "RPS": 367.539230328579,
93 "P50Ms": 41.264191,
94 "P95Ms": 57.833427,
95 "P99Ms": 74.200124,
96 "ErrorRate": 0,
97 "Status": {
98 "200": 3660
99 }
100 },
101 {
102 "Scenario": "read",
103 "Concurrency": 32,
104 "RPS": 482.9160524811834,
105 "P50Ms": 59.77146,
106 "P95Ms": 127.28985700000001,
107 "P99Ms": 195.709147,
108 "ErrorRate": 0,
109 "Status": {
110 "200": 4798
111 }
112 },
113 {
114 "Scenario": "read",
115 "Concurrency": 64,
116 "RPS": 536.5676017832897,
117 "P50Ms": 118.30839499999999,
118 "P95Ms": 179.611211,
119 "P99Ms": 238.626453,
120 "ErrorRate": 0,
121 "Status": {
122 "200": 5303
123 }
124 },
125 {
126 "Scenario": "read",
127 "Concurrency": 128,
128 "RPS": 348.07940625373016,
129 "P50Ms": 367.14313100000004,
130 "P95Ms": 616.229955,
131 "P99Ms": 693.192401,
132 "ErrorRate": 0,
133 "Status": {
134 "200": 3354
135 }
136 },
137 {
138 "Scenario": "read",
139 "Concurrency": 256,
140 "RPS": 534.8700128941944,
141 "P50Ms": 402.73589599999997,
142 "P95Ms": 854.790501,
143 "P99Ms": 1065.22288,
144 "ErrorRate": 0,
145 "Status": {
146 "200": 5094
147 }
148 },
149 {
150 "Scenario": "read",
151 "Concurrency": 512,
152 "RPS": 952.9658157743403,
153 "P50Ms": 314.52034499999996,
154 "P95Ms": 2053.502059,
155 "P99Ms": 2537.476385,
156 "ErrorRate": 0.4311204699102294,
157 "Status": {
158 "200": 5133,
159 "502": 3890
160 }
161 },
162 {
163 "Scenario": "toggle",
164 "Concurrency": 1,
165 "RPS": 88.39134892654133,
166 "P50Ms": 10.934498000000001,
167 "P95Ms": 14.850686999999999,
168 "P99Ms": 17.477161000000002,
169 "ErrorRate": 0,
170 "Status": {
171 "303": 883
172 }
173 },
174 {
175 "Scenario": "toggle",
176 "Concurrency": 2,
177 "RPS": 164.47616896564048,
178 "P50Ms": 11.279753,
179 "P95Ms": 17.263004,
180 "P99Ms": 23.367166,
181 "ErrorRate": 0,
182 "Status": {
183 "303": 1643
184 }
185 },
186 {
187 "Scenario": "toggle",
188 "Concurrency": 4,
189 "RPS": 115.6764887883567,
190 "P50Ms": 33.671655,
191 "P95Ms": 38.997323,
192 "P99Ms": 46.591305999999996,
193 "ErrorRate": 0,
194 "Status": {
195 "303": 1153
196 }
197 },
198 {
199 "Scenario": "toggle",
200 "Concurrency": 8,
201 "RPS": 222.60113188846984,
202 "P50Ms": 35.10275,
203 "P95Ms": 41.989121,
204 "P99Ms": 49.290602,
205 "ErrorRate": 0,
206 "Status": {
207 "303": 2220
208 }
209 },
210 {
211 "Scenario": "toggle",
212 "Concurrency": 16,
213 "RPS": 430.8344605140308,
214 "P50Ms": 35.732986000000004,
215 "P95Ms": 44.978485,
216 "P99Ms": 93.453748,
217 "ErrorRate": 0,
218 "Status": {
219 "303": 4293
220 }
221 },
222 {
223 "Scenario": "toggle",
224 "Concurrency": 32,
225 "RPS": 1187.6571228291066,
226 "P50Ms": 24.091721,
227 "P95Ms": 47.122064,
228 "P99Ms": 62.629355999999994,
229 "ErrorRate": 0,
230 "Status": {
231 "303": 11846
232 }
233 },
234 {
235 "Scenario": "toggle",
236 "Concurrency": 64,
237 "RPS": 1318.2371265117147,
238 "P50Ms": 45.52474,
239 "P95Ms": 81.330266,
240 "P99Ms": 114.22493899999999,
241 "ErrorRate": 0,
242 "Status": {
243 "303": 13121
244 }
245 },
246 {
247 "Scenario": "toggle",
248 "Concurrency": 128,
249 "RPS": 1409.929545847585,
250 "P50Ms": 90.76343200000001,
251 "P95Ms": 146.288902,
252 "P99Ms": 213.733196,
253 "ErrorRate": 0,
254 "Status": {
255 "303": 13976
256 }
257 },
258 {
259 "Scenario": "toggle",
260 "Concurrency": 256,
261 "RPS": 1453.3720610260882,
262 "P50Ms": 198.724234,
263 "P95Ms": 279.23400399999997,
264 "P99Ms": 358.414454,
265 "ErrorRate": 0,
266 "Status": {
267 "303": 14286
268 }
269 },
270 {
271 "Scenario": "read-after",
272 "Concurrency": 1,
273 "RPS": 60.09625655009286,
274 "P50Ms": 17.007264000000003,
275 "P95Ms": 21.515174000000002,
276 "P99Ms": 26.001507,
277 "ErrorRate": 0,
278 "Status": {
279 "200": 600
280 }
281 },
282 {
283 "Scenario": "read-after",
284 "Concurrency": 2,
285 "RPS": 116.98474952879565,
286 "P50Ms": 16.739255,
287 "P95Ms": 22.699843,
288 "P99Ms": 29.978254,
289 "ErrorRate": 0,
290 "Status": {
291 "200": 1168
292 }
293 },
294 {
295 "Scenario": "read-after",
296 "Concurrency": 4,
297 "RPS": 234.36507451817465,
298 "P50Ms": 16.269068,
299 "P95Ms": 23.239594999999998,
300 "P99Ms": 29.501097,
301 "ErrorRate": 0,
302 "Status": {
303 "200": 2340
304 }
305 },
306 {
307 "Scenario": "read-after",
308 "Concurrency": 8,
309 "RPS": 398.84339268676257,
310 "P50Ms": 18.998329000000002,
311 "P95Ms": 29.765583000000003,
312 "P99Ms": 37.536835999999994,
313 "ErrorRate": 0,
314 "Status": {
315 "200": 3984
316 }
317 },
318 {
319 "Scenario": "read-after",
320 "Concurrency": 16,
321 "RPS": 337.618541356529,
322 "P50Ms": 29.846004,
323 "P95Ms": 97.98349400000001,
324 "P99Ms": 368.31043,
325 "ErrorRate": 0,
326 "Status": {
327 "200": 3361
328 }
329 },
330 {
331 "Scenario": "read-after",
332 "Concurrency": 32,
333 "RPS": 475.8270092787615,
334 "P50Ms": 61.699927,
335 "P95Ms": 120.93642200000001,
336 "P99Ms": 187.719178,
337 "ErrorRate": 0,
338 "Status": {
339 "200": 4727
340 }
341 },
342 {
343 "Scenario": "read-after",
344 "Concurrency": 64,
345 "RPS": 511.8747541268479,
346 "P50Ms": 120.925931,
347 "P95Ms": 200.568238,
348 "P99Ms": 264.991386,
349 "ErrorRate": 0,
350 "Status": {
351 "200": 5056
352 }
353 },
354 {
355 "Scenario": "read-after",
356 "Concurrency": 128,
357 "RPS": 531.9302033045054,
358 "P50Ms": 235.33870000000002,
359 "P95Ms": 362.72706700000003,
360 "P99Ms": 433.713977,
361 "ErrorRate": 0,
362 "Status": {
363 "200": 5193
364 }
365 }
366 ],
367 "Weight": {
368 "HTMLBytes": 41189,
369 "JSBytes": 3110
370 },
371 "Memory": {
372 "IdleKB": 24252,
373 "PeakKB": 34188,
374 "AfterKB": 33444
375 },
376 "Code": {
377 "Server": 650,
378 "Templates": 0,
379 "JS": 75,
380 "Tests": 309,
381 "Deps": 3
382 },
383 "Build": {
384 "ColdSeconds": 81.408565296,
385 "WarmSeconds": 4.135749989,
386 "EditSeconds": 3.857357537,
387 "Bytes": 21994904,
388 "Host": "DOCS-T1",
389 "ColdRuns": 1,
390 "Runs": 3
391 },
392 "TokensBuild": {
393 "Input": 120,
394 "Output": 68280,
395 "CacheRead": 6750077,
396 "CacheWrite": 154900,
397 "Turns": 67,
398 "Seconds": 1813.84,
399 "CostUSD": 3.9552954
400 },
401 "TokensFix": {
402 "Input": 24,
403 "Output": 6564,
404 "CacheRead": 2080923,
405 "CacheWrite": 11946,
406 "Turns": 12,
407 "Seconds": 434.384,
408 "CostUSD": 0.6431286000000007
409 },
410 "TokensSecurity": {
411 "Input": 0,
412 "Output": 0,
413 "CacheRead": 0,
414 "CacheWrite": 0,
415 "Turns": 0,
416 "Seconds": 0,
417 "CostUSD": 0
418 },
419 "TokensReview": {
420 "Input": 688335,
421 "Output": 3734,
422 "CacheRead": 591488,
423 "CacheWrite": 0,
424 "Turns": 2,
425 "Seconds": 0,
426 "CostUSD": 0
427 },
428 "Readability": {
429 "Naming": 5,
430 "Structure": 4,
431 "Traceability": 5,
432 "Errors": 4,
433 "Comments": 5,
434 "Overall": 8,
435 "Notes": "Strongest: traceability and comments. Toggling an item reads straight through: route in Routes.register, the shared `action` helper, Store.toggle's single RETURNING statement, then Page.body or a 303. Doc comments explain real decisions (one SQLite connection serialising writes, append-only migrations, 400-day cookie, nojs controls, the JS action queue) with almost no noise. Weakest: a few quiet fallbacks. Store.todos maps missing columns to 0/\"\"/false instead of failing; app.js turns every failed action into a silent page reload; Assets is referenced but its definition (generated) isn't here, and Static.swift is an odd home for one helper. Helper names `action` and `changed` are generic, and the two trimmingWhitespace extensions live in unrelated files."
436 },
437 "ReviewFindings": [
438 "[correctness] [apps/swift/static/app.js:32](/home/paulca/amadan.net/carlos/todomvc-bakeoff/.worktrees/swift/apps/swift/static/app.js:32): Every action response removes the entire list, including any active editor. Toggle one item, then start editing another before the response arrives: the replacement discards the draft and focus without saving. Serializing requests does not protect unsent edits. Preserve active editor contents and focus across updates, or defer replacement until editing finishes."
439 ],
440 "Notes": null
441}
442