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": "go",
3 "Language": "Go",
4 "Status": "LIVE",
5 "URL": "https://todo-go-2.bfj.oncarlos.com",
6 "Version": "de2b146",
7 "Stack": "",
8 "Source": "https://amadan.net/carlos/todomvc-bakeoff?ref=main\u0026path=apps/go",
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": 95.854,
22 "P95": 99.995,
23 "P99": 101.884,
24 "Min": 85.333,
25 "Max": 101.884
26 },
27 "TTFB50": {
28 "N": 30,
29 "P50": 96.952,
30 "P95": 107.022,
31 "P99": 108.968,
32 "Min": 86.404,
33 "Max": 108.968
34 },
35 "Wake": [
36 1281.49,
37 1266.586,
38 1207.278
39 ],
40 "Load": [
41 {
42 "Scenario": "read",
43 "Concurrency": 1,
44 "RPS": 26.19700985757665,
45 "P50Ms": 37.080992,
46 "P95Ms": 45.513455,
47 "P99Ms": 87.950397,
48 "ErrorRate": 0,
49 "Status": {
50 "200": 261
51 }
52 },
53 {
54 "Scenario": "read",
55 "Concurrency": 2,
56 "RPS": 49.69603780944951,
57 "P50Ms": 39.203263,
58 "P95Ms": 49.312338999999994,
59 "P99Ms": 64.148218,
60 "ErrorRate": 0,
61 "Status": {
62 "200": 495
63 }
64 },
65 {
66 "Scenario": "read",
67 "Concurrency": 4,
68 "RPS": 221.6533468911837,
69 "P50Ms": 16.250929,
70 "P95Ms": 28.482484999999997,
71 "P99Ms": 42.428147,
72 "ErrorRate": 0,
73 "Status": {
74 "200": 2213
75 }
76 },
77 {
78 "Scenario": "read",
79 "Concurrency": 8,
80 "RPS": 328.5426444707159,
81 "P50Ms": 21.383586,
82 "P95Ms": 41.831233000000005,
83 "P99Ms": 64.782697,
84 "ErrorRate": 0,
85 "Status": {
86 "200": 3278
87 }
88 },
89 {
90 "Scenario": "read",
91 "Concurrency": 16,
92 "RPS": 344.14500452701253,
93 "P50Ms": 41.705826,
94 "P95Ms": 88.494744,
95 "P99Ms": 117.759515,
96 "ErrorRate": 0,
97 "Status": {
98 "200": 3426
99 }
100 },
101 {
102 "Scenario": "read",
103 "Concurrency": 32,
104 "RPS": 348.6114213130776,
105 "P50Ms": 84.14116800000001,
106 "P95Ms": 174.428096,
107 "P99Ms": 261.806561,
108 "ErrorRate": 0,
109 "Status": {
110 "200": 3457
111 }
112 },
113 {
114 "Scenario": "toggle",
115 "Concurrency": 1,
116 "RPS": 90.4889434546128,
117 "P50Ms": 10.373047999999999,
118 "P95Ms": 14.379687,
119 "P99Ms": 18.298227,
120 "ErrorRate": 0,
121 "Status": {
122 "303": 904
123 }
124 },
125 {
126 "Scenario": "toggle",
127 "Concurrency": 2,
128 "RPS": 178.59532431600363,
129 "P50Ms": 10.718494,
130 "P95Ms": 15.195796,
131 "P99Ms": 18.419508,
132 "ErrorRate": 0,
133 "Status": {
134 "303": 1785
135 }
136 },
137 {
138 "Scenario": "toggle",
139 "Concurrency": 4,
140 "RPS": 114.8820982672733,
141 "P50Ms": 34.05589,
142 "P95Ms": 39.101232,
143 "P99Ms": 52.71856,
144 "ErrorRate": 0,
145 "Status": {
146 "303": 1145
147 }
148 },
149 {
150 "Scenario": "toggle",
151 "Concurrency": 8,
152 "RPS": 231.44924288015238,
153 "P50Ms": 33.569687,
154 "P95Ms": 38.528214,
155 "P99Ms": 42.534389999999995,
156 "ErrorRate": 0,
157 "Status": {
158 "303": 2307
159 }
160 },
161 {
162 "Scenario": "toggle",
163 "Concurrency": 16,
164 "RPS": 440.6066098601266,
165 "P50Ms": 35.368354,
166 "P95Ms": 41.826858,
167 "P99Ms": 61.499335,
168 "ErrorRate": 0,
169 "Status": {
170 "303": 4391
171 }
172 },
173 {
174 "Scenario": "toggle",
175 "Concurrency": 32,
176 "RPS": 809.8263019761417,
177 "P50Ms": 36.397498,
178 "P95Ms": 53.485908,
179 "P99Ms": 102.051645,
180 "ErrorRate": 0,
181 "Status": {
182 "303": 8068
183 }
184 },
185 {
186 "Scenario": "toggle",
187 "Concurrency": 64,
188 "RPS": 737.0021586888215,
189 "P50Ms": 63.941333,
190 "P95Ms": 214.911373,
191 "P99Ms": 409.866859,
192 "ErrorRate": 0,
193 "Status": {
194 "303": 7307
195 }
196 },
197 {
198 "Scenario": "toggle",
199 "Concurrency": 128,
200 "RPS": 2123.892688780495,
201 "P50Ms": 44.575598,
202 "P95Ms": 167.01138200000003,
203 "P99Ms": 269.950022,
204 "ErrorRate": 0.42585839450627516,
205 "Status": {
206 "303": 12123,
207 "503": 8992
208 }
209 },
210 {
211 "Scenario": "read-after",
212 "Concurrency": 1,
213 "RPS": 66.39343975716841,
214 "P50Ms": 13.739421,
215 "P95Ms": 20.199078,
216 "P99Ms": 39.481995,
217 "ErrorRate": 0,
218 "Status": {
219 "200": 663
220 }
221 },
222 {
223 "Scenario": "read-after",
224 "Concurrency": 2,
225 "RPS": 121.88655367041757,
226 "P50Ms": 15.622307000000001,
227 "P95Ms": 22.650622,
228 "P99Ms": 28.559434000000003,
229 "ErrorRate": 0,
230 "Status": {
231 "200": 1217
232 }
233 },
234 {
235 "Scenario": "read-after",
236 "Concurrency": 4,
237 "RPS": 217.72982206625127,
238 "P50Ms": 17.020872,
239 "P95Ms": 26.880566,
240 "P99Ms": 43.940514,
241 "ErrorRate": 0,
242 "Status": {
243 "200": 2175
244 }
245 },
246 {
247 "Scenario": "read-after",
248 "Concurrency": 8,
249 "RPS": 320.27317494374086,
250 "P50Ms": 21.505298999999997,
251 "P95Ms": 44.038238,
252 "P99Ms": 78.484053,
253 "ErrorRate": 0,
254 "Status": {
255 "200": 3195
256 }
257 },
258 {
259 "Scenario": "read-after",
260 "Concurrency": 16,
261 "RPS": 339.83960723933336,
262 "P50Ms": 42.302873999999996,
263 "P95Ms": 89.360748,
264 "P99Ms": 121.13966599999999,
265 "ErrorRate": 0,
266 "Status": {
267 "200": 3383
268 }
269 },
270 {
271 "Scenario": "read-after",
272 "Concurrency": 32,
273 "RPS": 343.42720445666845,
274 "P50Ms": 84.309285,
275 "P95Ms": 196.58251299999998,
276 "P99Ms": 272.1716,
277 "ErrorRate": 0,
278 "Status": {
279 "200": 3403
280 }
281 }
282 ],
283 "Weight": {
284 "HTMLBytes": 46619,
285 "JSBytes": 4689
286 },
287 "Memory": {
288 "IdleKB": 17392,
289 "PeakKB": 72428,
290 "AfterKB": 33680
291 },
292 "Code": {
293 "Server": 665,
294 "Templates": 83,
295 "JS": 132,
296 "Tests": 517,
297 "Deps": 1
298 },
299 "Build": {
300 "ColdSeconds": 10.280152685000001,
301 "WarmSeconds": 0.221965481,
302 "EditSeconds": 0.09772033,
303 "Bytes": 12320930,
304 "Host": "DOCS-T1",
305 "ColdRuns": 1,
306 "Runs": 3
307 },
308 "TokensBuild": {
309 "Input": 82,
310 "Output": 56663,
311 "CacheRead": 4280334,
312 "CacheWrite": 132243,
313 "Turns": 46,
314 "Seconds": 693.833,
315 "CostUSD": 3.0475988
316 },
317 "TokensFix": {
318 "Input": 24,
319 "Output": 8561,
320 "CacheRead": 1816612,
321 "CacheWrite": 13188,
322 "Turns": 12,
323 "Seconds": 183.065,
324 "CostUSD": 0.6401423999999998
325 },
326 "TokensSecurity": {
327 "Input": 0,
328 "Output": 0,
329 "CacheRead": 0,
330 "CacheWrite": 0,
331 "Turns": 0,
332 "Seconds": 0,
333 "CostUSD": 0
334 },
335 "TokensReview": {
336 "Input": 514223,
337 "Output": 2623,
338 "CacheRead": 421504,
339 "CacheWrite": 0,
340 "Turns": 2,
341 "Seconds": 0,
342 "CostUSD": 0
343 },
344 "Readability": {
345 "Naming": 4,
346 "Structure": 4,
347 "Traceability": 5,
348 "Errors": 4,
349 "Comments": 5,
350 "Overall": 8,
351 "Notes": "Strongest: comments consistently explain why (migration policy, single-writer pool, Origin check, focusout during swap), and the package docs state the security model up front. Request flow is short: route in New -\u003e itemAction -\u003e action -\u003e Store method -\u003e render \"list\". Error path is explicit via ErrNotFound and fail, with buffered rendering for clean 500s. Weakest: action/itemAction wrappers with inline closures and two differing callback signatures add a layer to step through; `one`, `w`/`r` fields and `bumpMarker` are terse or odd. loadStatic ignores fs.Sub and WalkDir errors, and the view struct mixes filter state, counts and Version. app.js swap/draft restoration is dense."
352 },
353 "ReviewFindings": [
354 "[spec] [apps/go/main.go:114](/home/paulca/amadan.net/carlos/todomvc-bakeoff/.worktrees/go/apps/go/main.go:114): `checkLoopback` accepts any loopback address, including `127.0.0.2` and `::1`. The brief explicitly requires binding only to `127.0.0.1`. These alternative `--listen` addresses pass validation and start a listener; restrict validation to the required address."
355 ],
356 "Notes": null
357}
358