chore: Spinel measured on a fresh instance; record --clear-notes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by claude agent, operated by paul@keymail.dev 510ffae5d6ec79a449630523137238248ec31886 parent 9cddb7f
2 files changed, +336 −15
  • harness/cmd/bakeoff/main.go +7 −1
  • results/spinel.json +329 −14
diff --git a/harness/cmd/bakeoff/main.go b/harness/cmd/bakeoff/main.go
index e26a3fe..1e6ad00 100644
--- a/harness/cmd/bakeoff/main.go
+++ b/harness/cmd/bakeoff/main.go
@@ -48,6 +48,7 @@ func main() {
fs.StringVar(&rec.Source, "source", "", "record: source URL")
fs.StringVar(&rec.Note, "note", "", "record: a note shown in the app's section (added once)")
recURL := fs.String("app-url", "", "record: live URL")
+ clearNotes := fs.Bool("clear-notes", false, "record: drop existing notes first")
replies := fs.String("replies", "", "readability: comma-separated files, one scorer reply each")
fs.Parse(os.Args[2:])
if *slug == "" && cmd != "report" {
@@ -88,7 +89,12 @@ func main() {
if rec.URL = *recURL; rec.URL == "" && strings.HasPrefix(rec.Status, "LIVE") {
rec.URL = *url
}
- err = b.Update(*slug, func(r *b.AppResult) { b.ApplyRecord(r, rec) })
+ err = b.Update(*slug, func(r *b.AppResult) {
+ if *clearNotes {
+ r.Notes = nil
+ }
+ b.ApplyRecord(r, rec)
+ })
case "source":
err = source(*dir)
case "readability":
diff --git a/results/spinel.json b/results/spinel.json
index c7d65f8..bc9ad00 100644
--- a/results/spinel.json
+++ b/results/spinel.json
@@ -2,7 +2,7 @@
"Slug": "spinel",
"Language": "Spinel",
"Status": "LIVE",
- "URL": "https://todo-spinel-3.bfj.oncarlos.com",
+ "URL": "https://todo-spinel-4.bfj.oncarlos.com",
"Version": "e344882",
"Stack": "",
"Source": "",
@@ -18,22 +18,335 @@
},
"TTFBEmpty": {
"N": 30,
- "P50": 96.832,
- "P95": 133.322,
- "P99": 135.335,
- "Min": 84.652,
- "Max": 135.335
+ "P50": 94.565,
+ "P95": 101.677,
+ "P99": 105.118,
+ "Min": 84.654,
+ "Max": 105.118
},
"TTFB50": {
"N": 30,
- "P50": 93.83,
- "P95": 103.919,
- "P99": 105.906,
- "Min": 84.234,
- "Max": 105.906
+ "P50": 92.83,
+ "P95": 103.283,
+ "P99": 108.763,
+ "Min": 82.851,
+ "Max": 108.763
},
"Wake": null,
- "Load": null,
+ "Load": [
+ {
+ "Scenario": "read",
+ "Concurrency": 1,
+ "RPS": 25.594970301672053,
+ "P50Ms": 38.742631,
+ "P95Ms": 42.993732,
+ "P99Ms": 46.257200999999995,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 255
+ }
+ },
+ {
+ "Scenario": "read",
+ "Concurrency": 2,
+ "RPS": 54.99317071708903,
+ "P50Ms": 35.90533,
+ "P95Ms": 41.97235,
+ "P99Ms": 62.428013,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 548
+ }
+ },
+ {
+ "Scenario": "read",
+ "Concurrency": 4,
+ "RPS": 247.9686645966048,
+ "P50Ms": 15.490781,
+ "P95Ms": 21.757472,
+ "P99Ms": 29.339324,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 2476
+ }
+ },
+ {
+ "Scenario": "read",
+ "Concurrency": 8,
+ "RPS": 445.1923600556087,
+ "P50Ms": 16.816647,
+ "P95Ms": 26.753986,
+ "P99Ms": 36.077849,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 4445
+ }
+ },
+ {
+ "Scenario": "read",
+ "Concurrency": 16,
+ "RPS": 656.0083460563341,
+ "P50Ms": 20.694995000000002,
+ "P95Ms": 41.204227,
+ "P99Ms": 64.351545,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 6545
+ }
+ },
+ {
+ "Scenario": "read",
+ "Concurrency": 32,
+ "RPS": 627.8284193984191,
+ "P50Ms": 45.189996,
+ "P95Ms": 77.537528,
+ "P99Ms": 170.328653,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 6247
+ }
+ },
+ {
+ "Scenario": "read",
+ "Concurrency": 64,
+ "RPS": 721.7061662902305,
+ "P50Ms": 82.34214700000001,
+ "P95Ms": 128.715374,
+ "P99Ms": 230.934482,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 7154
+ }
+ },
+ {
+ "Scenario": "read",
+ "Concurrency": 128,
+ "RPS": 2990.4632740577986,
+ "P50Ms": 21.819719000000003,
+ "P95Ms": 128.803908,
+ "P99Ms": 177.15046,
+ "ErrorRate": 0.8045324827933523,
+ "Status": {
+ "200": 5822,
+ "503": 23963
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 1,
+ "RPS": 83.88447238019424,
+ "P50Ms": 9.788593,
+ "P95Ms": 15.403773000000001,
+ "P99Ms": 21.303023,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 838
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 2,
+ "RPS": 179.67660671670595,
+ "P50Ms": 10.722333,
+ "P95Ms": 15.036688,
+ "P99Ms": 17.771734000000002,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 1795
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 4,
+ "RPS": 310.1625328622903,
+ "P50Ms": 12.498603000000001,
+ "P95Ms": 17.47861,
+ "P99Ms": 23.312796,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 3098
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 8,
+ "RPS": 556.9101887089065,
+ "P50Ms": 14.2856,
+ "P95Ms": 18.779223,
+ "P99Ms": 23.257653,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 5562
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 16,
+ "RPS": 3.299356197285095,
+ "P50Ms": 1399.654903,
+ "P95Ms": 1403.356961,
+ "P99Ms": 1403.356961,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 17
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 32,
+ "RPS": 1532.8835689908904,
+ "P50Ms": 15.445893,
+ "P95Ms": 31.467546,
+ "P99Ms": 52.586470000000006,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 15300
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 64,
+ "RPS": 2282.5118850616304,
+ "P50Ms": 20.323867,
+ "P95Ms": 47.209343000000004,
+ "P99Ms": 71.43903999999999,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 22766
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 128,
+ "RPS": 2451.4011261368464,
+ "P50Ms": 38.70759,
+ "P95Ms": 92.036958,
+ "P99Ms": 161.91760299999999,
+ "ErrorRate": 0,
+ "Status": {
+ "303": 24392
+ }
+ },
+ {
+ "Scenario": "toggle",
+ "Concurrency": 256,
+ "RPS": 2892.398792397893,
+ "P50Ms": 74.994662,
+ "P95Ms": 152.24756,
+ "P99Ms": 246.057975,
+ "ErrorRate": 0.24245065904177418,
+ "Status": {
+ "303": 21725,
+ "502": 6953
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 1,
+ "RPS": 66.49173397370429,
+ "P50Ms": 12.198212999999999,
+ "P95Ms": 17.754181,
+ "P99Ms": 22.703056,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 664
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 2,
+ "RPS": 139.3728286956172,
+ "P50Ms": 13.792565,
+ "P95Ms": 19.511307,
+ "P99Ms": 24.752534,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 1392
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 4,
+ "RPS": 251.77386594824677,
+ "P50Ms": 15.484064,
+ "P95Ms": 20.537094999999997,
+ "P99Ms": 26.231531999999998,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 2514
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 8,
+ "RPS": 386.1619525826817,
+ "P50Ms": 16.855828,
+ "P95Ms": 26.412496,
+ "P99Ms": 38.507045,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 3854
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 16,
+ "RPS": 584.8175879733568,
+ "P50Ms": 20.718797000000002,
+ "P95Ms": 44.462733,
+ "P99Ms": 63.458346999999996,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 5833
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 32,
+ "RPS": 3.199286737897577,
+ "P50Ms": 0,
+ "P95Ms": 0,
+ "P99Ms": 0,
+ "ErrorRate": 0
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 64,
+ "RPS": 662.0611944347767,
+ "P50Ms": 78.303783,
+ "P95Ms": 137.770103,
+ "P99Ms": 247.53055600000002,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 6558
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 128,
+ "RPS": 705.8385464581186,
+ "P50Ms": 148.717762,
+ "P95Ms": 262.54161799999997,
+ "P99Ms": 1461.214874,
+ "ErrorRate": 0,
+ "Status": {
+ "200": 6938
+ }
+ },
+ {
+ "Scenario": "read-after",
+ "Concurrency": 256,
+ "RPS": 888.065025131621,
+ "P50Ms": 272.531186,
+ "P95Ms": 438.97776,
+ "P99Ms": 1592.9036810000002,
+ "ErrorRate": 0.20815003473026164,
+ "Status": {
+ "200": 6840,
+ "502": 1798
+ }
+ }
+ ],
"Weight": {
"HTMLBytes": 41526,
"JSBytes": 2655
@@ -50,7 +363,9 @@
"WarmSeconds": 0,
"EditSeconds": 0,
"Bytes": 0,
- "Host": ""
+ "Host": "",
+ "ColdRuns": 0,
+ "Runs": 0
},
"TokensBuild": {
"Input": 258,
@@ -103,6 +418,6 @@
"[spec] `apps/spinel/Makefile:130` — `clean-deps` deletes only the local SQLite and tep artifacts. The arm64 build still links precompiled OpenSSL, zlib and zstd libraries from the shared toolchain root (`scripts/arm64-cc:21`), so the next build does not compile every third-party library from scratch as required. Build those dependencies into the app’s own cache and include them in `clean-deps`."
],
"Notes": [
- "Its server process exited (status 0) 10 times during the load test, and Carloku restarted it each time; the edge answered 502 in between."
+ "Its server process exited (status 0) 16 times during the load test, and Carloku restarted it each time; the edge answered 502 in between."
]
}