rigscope 0.1.0 → 0.1.2

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.
Files changed (124) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +2 -2
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_not-found.html +1 -1
  12. package/.next/server/app/_not-found.rsc +2 -2
  13. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  14. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  16. package/.next/server/app/administration/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/administration.html +1 -1
  18. package/.next/server/app/administration.rsc +2 -2
  19. package/.next/server/app/administration.segments/_full.segment.rsc +2 -2
  20. package/.next/server/app/administration.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/administration.segments/administration/__PAGE__.segment.rsc +2 -2
  22. package/.next/server/app/alerts/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/alerts.html +1 -1
  24. package/.next/server/app/alerts.rsc +2 -2
  25. package/.next/server/app/alerts.segments/_full.segment.rsc +2 -2
  26. package/.next/server/app/alerts.segments/_tree.segment.rsc +2 -2
  27. package/.next/server/app/alerts.segments/alerts/__PAGE__.segment.rsc +2 -2
  28. package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/connections.html +1 -1
  30. package/.next/server/app/connections.rsc +2 -2
  31. package/.next/server/app/connections.segments/_full.segment.rsc +2 -2
  32. package/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
  33. package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +2 -2
  34. package/.next/server/app/history/page.js +2 -2
  35. package/.next/server/app/history/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/history.html +1 -1
  37. package/.next/server/app/history.rsc +5 -5
  38. package/.next/server/app/history.segments/_full.segment.rsc +5 -5
  39. package/.next/server/app/history.segments/_tree.segment.rsc +2 -2
  40. package/.next/server/app/history.segments/history/__PAGE__.segment.rsc +5 -5
  41. package/.next/server/app/index.html +1 -1
  42. package/.next/server/app/index.rsc +2 -2
  43. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  45. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  46. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/login.html +1 -1
  48. package/.next/server/app/login.rsc +2 -2
  49. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  51. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  52. package/.next/server/app/machines/[machineId]/page.js +1 -1
  53. package/.next/server/app/machines/[machineId]/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/processes/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/processes.html +1 -1
  57. package/.next/server/app/processes.rsc +2 -2
  58. package/.next/server/app/processes.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/processes.segments/_tree.segment.rsc +2 -2
  60. package/.next/server/app/processes.segments/processes/__PAGE__.segment.rsc +2 -2
  61. package/.next/server/app-paths-manifest.json +2 -2
  62. package/.next/server/chunks/168.js +1 -1
  63. package/.next/server/middleware-build-manifest.js +1 -1
  64. package/.next/server/pages/404.html +1 -1
  65. package/.next/server/pages/500.html +1 -1
  66. package/.next/static/chunks/408-4fe7147e38981ee1.js +1 -0
  67. package/.next/static/chunks/app/history/page-22be927a4c3a9c76.js +3 -0
  68. package/.next/static/chunks/app/machines/[machineId]/page-916ee73de5eb067d.js +1 -0
  69. package/.next/static/css/3fbf75e4c471c6a8.css +1 -0
  70. package/CHANGELOG.md +27 -0
  71. package/README.md +53 -136
  72. package/dist/collector.cjs +9 -1
  73. package/dist/hub.cjs +14 -5
  74. package/dist/ops.cjs +8 -4
  75. package/docs/bottlenecks.md +1 -1
  76. package/docs/configuration.md +85 -0
  77. package/docs/development.md +1 -1
  78. package/docs/installation.md +205 -376
  79. package/docs/monitoring.md +112 -0
  80. package/docs/operations.md +103 -68
  81. package/docs/releasing.md +16 -14
  82. package/docs/scale-validation.md +34 -3
  83. package/docs/stress-2026-11-04/180301-probe-m100-u1-s1-20000ms.json +412 -0
  84. package/docs/stress-2026-11-04/180335-probe-m200-u1-s1-20000ms.json +412 -0
  85. package/docs/stress-2026-11-04/180409-probe-m400-u1-s1-20000ms.json +412 -0
  86. package/docs/stress-2026-11-04/180443-probe-m800-u1-s1-20000ms.json +412 -0
  87. package/docs/stress-2026-11-04/180518-probe-m600-u1-s1-20000ms.json +412 -0
  88. package/docs/stress-2026-11-04/180553-probe-m500-u1-s1-20000ms.json +412 -0
  89. package/docs/stress-2026-11-04/180628-probe-m550-u1-s1-20000ms.json +412 -0
  90. package/docs/stress-2026-11-04/180716-probe-m800-u1-s0-20000ms.json +415 -0
  91. package/docs/stress-2026-11-04/180751-probe-m1600-u1-s0-20000ms.json +415 -0
  92. package/docs/stress-2026-11-04/180828-probe-m3200-u1-s0-20000ms.json +416 -0
  93. package/docs/stress-2026-11-04/180941-probe-m2400-u1-s0-20000ms.json +416 -0
  94. package/docs/stress-2026-11-04/181031-probe-m2000-u1-s0-20000ms.json +416 -0
  95. package/docs/stress-2026-11-04/181114-probe-m1800-u1-s0-20000ms.json +416 -0
  96. package/docs/stress-2026-11-04/181203-probe-m100-u64-s64-20000ms.json +418 -0
  97. package/docs/stress-2026-11-04/181304-probe-m200-u64-s64-20000ms.json +418 -0
  98. package/docs/stress-2026-11-04/181405-probe-m400-u64-s64-20000ms.json +418 -0
  99. package/docs/stress-2026-11-04/181507-probe-m500-u64-s64-20000ms.json +418 -0
  100. package/docs/stress-2026-11-04/181609-probe-m450-u64-s64-20000ms.json +418 -0
  101. package/docs/stress-2026-11-04/181845-probe-m2-u2-s2-3000ms.json +419 -0
  102. package/docs/stress-2026-11-04/181931-probe-m500-u64-s64-30000ms.json +420 -0
  103. package/docs/stress-2026-11-04/182108-probe-m1800-u1-s0-120000ms.json +418 -0
  104. package/docs/stress-2026-11-04/182354-probe-m1200-u1-s0-120000ms.json +418 -0
  105. package/docs/stress-2026-11-04/182625-probe-m900-u1-s0-120000ms.json +418 -0
  106. package/docs/stress-2026-11-04/182847-probe-m1050-u1-s0-120000ms.json +418 -0
  107. package/docs/stress-2026-11-04/183112-probe-m1125-u1-s0-120000ms.json +418 -0
  108. package/docs/stress-2026-11-04/193608-probe-m500-u64-s64-120000ms.json +420 -0
  109. package/docs/stress-2026-11-04/193909-probe-m529-u1-s1-15000ms.json +420 -0
  110. package/docs/stress-2026-11-04/193940-probe-m530-u1-s1-15000ms.json +420 -0
  111. package/docs/stress-2026-11-04/194011-probe-m100-u1-s65-10000ms.json +421 -0
  112. package/docs/stress-2026-11-04/README.md +205 -0
  113. package/docs/stress-2026-11-04/index.jsonl +29 -0
  114. package/docs/stress-2026-11-04/manifest.json +13 -0
  115. package/docs/stress-2026-11-04/results.html +22 -0
  116. package/docs/system-installation.md +195 -0
  117. package/package.json +9 -1
  118. package/packaging/system/README.md +1 -1
  119. package/.next/static/chunks/408-18819c6490a5f8d3.js +0 -1
  120. package/.next/static/chunks/app/history/page-3fa5846eca26b7f7.js +0 -3
  121. package/.next/static/chunks/app/machines/[machineId]/page-a5aa1d8676272f38.js +0 -1
  122. package/.next/static/css/e41ccbccc3afaae5.css +0 -1
  123. /package/.next/static/{DZKWF9ur7H5wI0c7RAhdq → npHoP6NSY976Yaye-xi86}/_buildManifest.js +0 -0
  124. /package/.next/static/{DZKWF9ur7H5wI0c7RAhdq → npHoP6NSY976Yaye-xi86}/_ssgManifest.js +0 -0
@@ -0,0 +1,420 @@
1
+ {
2
+ "tool": "rigscope-scale-harness",
3
+ "synthetic": true,
4
+ "disclaimer": "Synthetic bounded workload on an isolated temporary hub/database, not a capacity, latency, or hardware guarantee. Values depend on this host, disk, Node version, payload, cadence, viewer count and concurrent activity.",
5
+ "generatedAt": "2026-11-04T18:20:37.876Z",
6
+ "node": "v26.13.0",
7
+ "host": {
8
+ "platform": "linux",
9
+ "release": "7.3.0-9-generic",
10
+ "arch": "x64",
11
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
12
+ "logicalCores": 48,
13
+ "totalMemoryBytes": 130351214592,
14
+ "loadAverage": [
15
+ 1.08,
16
+ 0.84,
17
+ 0.69
18
+ ],
19
+ "node": "v26.13.0"
20
+ },
21
+ "command": "npx tsx scripts/scale-harness.ts --case fleet-75m --machines 500 --viewers 64 --sse-clients 64 --sse-workers 4 --duration-ms 30000 --history-interval-ms 1000 --database-budget-mb 1024 --json-out /home/triet/Project/rigscope/docs/stress-2026-11-04/181931-probe-m500-u64-s64-30000ms.json",
22
+ "suite": [
23
+ {
24
+ "name": "fleet-75m",
25
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
26
+ "machines": 500,
27
+ "durationMs": 30000,
28
+ "sampleIntervalMs": 1000,
29
+ "recordsPerBatch": 1,
30
+ "viewers": 64,
31
+ "sseClients": 64,
32
+ "slowSseClients": 0,
33
+ "slowSsePauseAfterMs": 0,
34
+ "slowSsePauseMs": 0,
35
+ "historyIntervalMs": 1000,
36
+ "historyMetricSet": "standard",
37
+ "churnEveryMs": null,
38
+ "churnMachines": 0,
39
+ "replayRecords": 0
40
+ }
41
+ ],
42
+ "cases": [
43
+ {
44
+ "name": "fleet-75m",
45
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
46
+ "config": {
47
+ "name": "fleet-75m",
48
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
49
+ "machines": 500,
50
+ "durationMs": 30000,
51
+ "sampleIntervalMs": 1000,
52
+ "recordsPerBatch": 1,
53
+ "viewers": 64,
54
+ "sseClients": 64,
55
+ "slowSseClients": 0,
56
+ "slowSsePauseAfterMs": 0,
57
+ "slowSsePauseMs": 0,
58
+ "historyIntervalMs": 1000,
59
+ "historyMetricSet": "standard",
60
+ "churnEveryMs": null,
61
+ "churnMachines": 0,
62
+ "replayRecords": 0,
63
+ "warmupMs": 1500,
64
+ "clientWarmupMs": 1000,
65
+ "sseWorkers": 4,
66
+ "maxCollectorConnections": 510,
67
+ "databaseBudgetBytes": 1073741824
68
+ },
69
+ "host": {
70
+ "platform": "linux",
71
+ "release": "7.3.0-9-generic",
72
+ "arch": "x64",
73
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
74
+ "logicalCores": 48,
75
+ "totalMemoryBytes": 130351214592,
76
+ "loadAverage": [
77
+ 1.08,
78
+ 0.84,
79
+ 0.69
80
+ ],
81
+ "node": "v26.13.0"
82
+ },
83
+ "authorization": {
84
+ "anonymousDenied": true,
85
+ "scopedHistory": true,
86
+ "scopedSnapshot": true,
87
+ "scopedReset": true
88
+ },
89
+ "ingestion": {
90
+ "recordsSent": 17600,
91
+ "recordsAccepted": 17600,
92
+ "recordsRejected": 0,
93
+ "replayRecordsSent": 0,
94
+ "replayRecordsAccepted": 0,
95
+ "retryAcks": 0,
96
+ "unackedLiveRecords": 0,
97
+ "sendErrors": 0,
98
+ "ackLatencyMs": {
99
+ "count": 17600,
100
+ "min": 3.33,
101
+ "avg": 61.77,
102
+ "p50": 41.91,
103
+ "p95": 172.35,
104
+ "p99": 200.35,
105
+ "max": 244.46
106
+ },
107
+ "sampleToCommitLagMs": {
108
+ "count": 17600,
109
+ "min": 3,
110
+ "avg": 61.77,
111
+ "p50": 42,
112
+ "p95": 172,
113
+ "p99": 200,
114
+ "max": 245
115
+ },
116
+ "messagesSent": 18100,
117
+ "backpressureSkips": 0,
118
+ "connects": 500,
119
+ "reconnects": 0,
120
+ "reconnectFailures": 0,
121
+ "collectorRecoveryMs": {
122
+ "count": 0,
123
+ "min": 0,
124
+ "avg": 0,
125
+ "p50": 0,
126
+ "p95": 0,
127
+ "p99": 0,
128
+ "max": 0
129
+ }
130
+ },
131
+ "history": {
132
+ "queries": 1984,
133
+ "ok": 1984,
134
+ "rateLimited": 0,
135
+ "errors": 0,
136
+ "latencyMs": {
137
+ "count": 1984,
138
+ "min": 1.74,
139
+ "avg": 58.15,
140
+ "p50": 42.66,
141
+ "p95": 154.04,
142
+ "p99": 209.74,
143
+ "max": 272.95
144
+ },
145
+ "series": {
146
+ "count": 1984,
147
+ "min": 4,
148
+ "avg": 4,
149
+ "p50": 4,
150
+ "p95": 4,
151
+ "p99": 4,
152
+ "max": 4
153
+ },
154
+ "points": {
155
+ "count": 1984,
156
+ "min": 12,
157
+ "avg": 74.81,
158
+ "p50": 76,
159
+ "p95": 132,
160
+ "p99": 136,
161
+ "max": 136
162
+ },
163
+ "truncated": 0,
164
+ "tiers": {
165
+ "raw": 1984
166
+ }
167
+ },
168
+ "stream": {
169
+ "clients": 64,
170
+ "httpStatuses": {
171
+ "200": 64
172
+ },
173
+ "slowClients": 0,
174
+ "events": 3221,
175
+ "snapshots": 64,
176
+ "updates": 3157,
177
+ "resets": 0,
178
+ "bytes": 3187696084,
179
+ "eventLagMs": {
180
+ "count": 3221,
181
+ "min": 42,
182
+ "avg": 224.4,
183
+ "p50": 212,
184
+ "p95": 384,
185
+ "p99": 554,
186
+ "max": 651
187
+ },
188
+ "normalEventLagMs": {
189
+ "count": 3221,
190
+ "min": 42,
191
+ "avg": 224.4,
192
+ "p50": 212,
193
+ "p95": 384,
194
+ "p99": 554,
195
+ "max": 651
196
+ },
197
+ "slowEventLagMs": {
198
+ "count": 0,
199
+ "min": 0,
200
+ "avg": 0,
201
+ "p50": 0,
202
+ "p95": 0,
203
+ "p99": 0,
204
+ "max": 0
205
+ },
206
+ "firstEventMs": {
207
+ "count": 64,
208
+ "min": 35.17,
209
+ "avg": 413.7,
210
+ "p50": 457.01,
211
+ "p95": 719.52,
212
+ "p99": 769.95,
213
+ "max": 769.95
214
+ },
215
+ "reconnects": 0,
216
+ "resetsAfterReconnect": 0,
217
+ "slowPauses": 0,
218
+ "slowDrops": 0,
219
+ "sseRecoveryMs": {
220
+ "count": 0,
221
+ "min": 0,
222
+ "avg": 0,
223
+ "p50": 0,
224
+ "p95": 0,
225
+ "p99": 0,
226
+ "max": 0
227
+ }
228
+ },
229
+ "hub": {
230
+ "baseline": {
231
+ "pid": 184288,
232
+ "uptimeMs": 31027.23,
233
+ "hubRunId": "3ac36c9f-c27d-41ac-ae79-7eb470a5502f",
234
+ "eventLoopDelayMs": {
235
+ "p50": 16.48,
236
+ "p95": 37.19,
237
+ "p99": 46.14,
238
+ "max": 135.4
239
+ },
240
+ "eventLoopUtilization": 0.8418,
241
+ "cpuPercent": 100.56,
242
+ "cpuMs": {
243
+ "user": 1077.14,
244
+ "system": 154.05
245
+ },
246
+ "rssBytes": 307527680,
247
+ "rssPeakBytes": 307527680,
248
+ "heapUsedBytes": 148780616,
249
+ "database": {
250
+ "bytes": 15160648,
251
+ "walBytes": 4445512,
252
+ "mainBytes": 10715136
253
+ },
254
+ "store": {
255
+ "queuedRecords": 0,
256
+ "queuedBatches": 0,
257
+ "lastFlushMs": 1793816402483,
258
+ "lastFlushDurationMs": 5,
259
+ "committedRecords": 1842,
260
+ "duplicateRecords": 0,
261
+ "rejectedRecords": 0,
262
+ "writeFailures": 0,
263
+ "lastWriteError": null,
264
+ "diskFullFailures": 0,
265
+ "dbBytes": 15160648,
266
+ "dbWalBytes": 4445512,
267
+ "dbBytesLimit": 1073741824,
268
+ "retention": {
269
+ "lastRunAtMs": 0,
270
+ "lastRunDurationMs": 0,
271
+ "deletedRows": 0,
272
+ "pressure": false,
273
+ "effectiveRawCutoffMs": null,
274
+ "physicalBytes": 15160648,
275
+ "physicalLimitBytes": 1073741824,
276
+ "physicalPressure": false,
277
+ "walBytes": 4445512
278
+ }
279
+ },
280
+ "liveClients": 64,
281
+ "sessions": 65,
282
+ "connectedMachines": 500,
283
+ "configuredMachines": 500,
284
+ "snapshotBytes": 989162
285
+ },
286
+ "window": {
287
+ "pid": 184288,
288
+ "uptimeMs": 61177.7,
289
+ "hubRunId": "3ac36c9f-c27d-41ac-ae79-7eb470a5502f",
290
+ "eventLoopDelayMs": {
291
+ "p50": 10.12,
292
+ "p95": 49.38,
293
+ "p99": 92.6,
294
+ "max": 165.41
295
+ },
296
+ "eventLoopUtilization": 0.5728,
297
+ "cpuPercent": 66.11,
298
+ "cpuMs": {
299
+ "user": 15580.53,
300
+ "system": 4347.15
301
+ },
302
+ "rssBytes": 387416064,
303
+ "rssPeakBytes": 450863104,
304
+ "heapUsedBytes": 161474104,
305
+ "database": {
306
+ "bytes": 41588488,
307
+ "walBytes": 5928712,
308
+ "mainBytes": 35659776
309
+ },
310
+ "store": {
311
+ "queuedRecords": 0,
312
+ "queuedBatches": 0,
313
+ "lastFlushMs": 1793816432540,
314
+ "lastFlushDurationMs": 12,
315
+ "committedRecords": 16859,
316
+ "duplicateRecords": 0,
317
+ "rejectedRecords": 0,
318
+ "writeFailures": 0,
319
+ "lastWriteError": null,
320
+ "diskFullFailures": 0,
321
+ "dbBytes": 41588488,
322
+ "dbWalBytes": 5928712,
323
+ "dbBytesLimit": 1073741824,
324
+ "retention": {
325
+ "lastRunAtMs": 1793816431668,
326
+ "lastRunDurationMs": 51,
327
+ "deletedRows": 0,
328
+ "pressure": false,
329
+ "effectiveRawCutoffMs": 1793643631668,
330
+ "physicalBytes": 41588488,
331
+ "physicalLimitBytes": 1073741824,
332
+ "physicalPressure": false,
333
+ "walBytes": 5928712
334
+ }
335
+ },
336
+ "liveClients": 64,
337
+ "sessions": 65,
338
+ "connectedMachines": 500,
339
+ "configuredMachines": 500,
340
+ "snapshotBytes": 989662
341
+ },
342
+ "final": {
343
+ "pid": 184288,
344
+ "uptimeMs": 64188.37,
345
+ "hubRunId": "3ac36c9f-c27d-41ac-ae79-7eb470a5502f",
346
+ "eventLoopDelayMs": {
347
+ "p50": 10.11,
348
+ "p95": 28.97,
349
+ "p99": 92.47,
350
+ "max": 117.37
351
+ },
352
+ "eventLoopUtilization": 0.3158,
353
+ "cpuPercent": 40.76,
354
+ "cpuMs": {
355
+ "user": 881.61,
356
+ "system": 342.38
357
+ },
358
+ "rssBytes": 290226176,
359
+ "rssPeakBytes": 387416064,
360
+ "heapUsedBytes": 22331312,
361
+ "database": {
362
+ "bytes": 42961416,
363
+ "walBytes": 6060552,
364
+ "mainBytes": 36900864
365
+ },
366
+ "store": {
367
+ "queuedRecords": 0,
368
+ "queuedBatches": 0,
369
+ "lastFlushMs": 1793816434170,
370
+ "lastFlushDurationMs": 5,
371
+ "committedRecords": 17600,
372
+ "duplicateRecords": 0,
373
+ "rejectedRecords": 0,
374
+ "writeFailures": 0,
375
+ "lastWriteError": null,
376
+ "diskFullFailures": 0,
377
+ "dbBytes": 42961416,
378
+ "dbWalBytes": 6060552,
379
+ "dbBytesLimit": 1073741824,
380
+ "retention": {
381
+ "lastRunAtMs": 1793816431668,
382
+ "lastRunDurationMs": 51,
383
+ "deletedRows": 0,
384
+ "pressure": false,
385
+ "effectiveRawCutoffMs": 1793643631668,
386
+ "physicalBytes": 42961416,
387
+ "physicalLimitBytes": 1073741824,
388
+ "physicalPressure": false,
389
+ "walBytes": 6060552
390
+ }
391
+ },
392
+ "liveClients": 64,
393
+ "sessions": 65,
394
+ "connectedMachines": 500,
395
+ "configuredMachines": 500,
396
+ "snapshotBytes": 989662
397
+ },
398
+ "databaseGrowth": {
399
+ "bytes": 27800768,
400
+ "walBytes": 1615040,
401
+ "mainBytes": 26185728
402
+ }
403
+ },
404
+ "elapsedMs": 30024.25,
405
+ "artifacts": {
406
+ "directory": "/tmp/rigscope-scale-dlqV4a",
407
+ "kept": false,
408
+ "configPath": "/tmp/rigscope-scale-dlqV4a/hub-config.json",
409
+ "databasePath": "/tmp/rigscope-scale-dlqV4a/scale.sqlite"
410
+ }
411
+ }
412
+ ],
413
+ "limitations": [
414
+ "Collector payload values and cadence are synthetic; the hub, database, auth, SSE and History paths are real modules.",
415
+ "The hub child and all load generators share one host; the hub event loop is single-threaded, while load processes can use other cores. This is not distributed load.",
416
+ "History queries are synchronous on the hub event loop, so 'concurrent' viewers model overlapping HTTP requests, not parallel SQLite readers.",
417
+ "The measurement never contacts the live service; it uses a fresh temporary database and loopback ephemeral port.",
418
+ "A passing case is evidence for this host and workload, not an unlimited-capacity or latency guarantee."
419
+ ]
420
+ }