Faultsense Stress Benchmark Report
faultsense 0.4.0 stress scaling curve. 13 configurations, 2 pairs each.
Environment
| Field | Value |
|---|---|
| Machine | gendry.local |
| OS | Darwin 25.3.0 (arm64) |
| CPU | Apple M4 Pro (14 cores) |
| RAM | 48GB |
| Chromium | 147.0.7727.15 |
| Agent version | 0.4.0 |
| Agent commit | 1569318 |
| Timestamp (UTC) | 2026-04-13T17:42:17.459Z |
| Pairs (including 1 warmup) | 2 |
| Soak duration | 1s |
Scaling Curve
| Assertions | Churn (mut/s) | Profile | MO P50 | MO P95 | MO P99 | INP Δ | Heap Δ | Long Tasks Δ | p-value (heap) |
|---|---|---|---|---|---|---|---|---|---|
| 50 | 0 | unthrottled | 0ms | 0.3ms | 0.5ms | +0ms | +76.3KB | +0 | <0.001 |
| 50 | 0 | cpu4x | 0ms | 0.7ms | 1.1ms | +0ms | +69.4KB | +0 | <0.001 |
| 50 | 100 | unthrottled | 0ms | 0.1ms | 0.3ms | +0ms | +92.4KB | +0 | <0.001 |
| 50 | 100 | cpu4x | 0ms | 0.7ms | 1ms | +0ms | +82.4KB | +0 | <0.001 |
| 200 | 0 | unthrottled | 0ms | 0.3ms | 0.5ms | +0ms | +114.5KB | +0 | <0.001 |
| 200 | 0 | cpu4x | 0ms | 0.7ms | 1.1ms | +0ms | +119.8KB | +0 | <0.001 |
| 200 | 100 | unthrottled | 0ms | 0.1ms | 0.3ms | +0ms | +149.5KB | +0 | <0.001 |
| 200 | 100 | cpu4x | 0ms | 0.7ms | 0.9ms | +0ms | +152.2KB | +0 | <0.001 |
| 1000 | 0 | unthrottled | 0.1ms | 0.6ms | 0.8ms | +0ms | +116.4KB | +0 | 0.001 |
| 1000 | 0 | cpu4x | 0.3ms | 1.1ms | 2.2ms | +0ms | +116.7KB | -1 | <0.001 |
| 1000 | 100 | unthrottled | 0.1ms | 0.2ms | 0.6ms | +0ms | +140.4KB | +0 | <0.001 |
| 1000 | 100 | cpu4x | 0.4ms | 1ms | 1.4ms | +0ms | +101.5KB | +0 | <0.001 |
Baseline: A-vs-A Baseline (50 assertions, 0 churn/s) — Unthrottled
| Metric | A1 | A2 | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 68ms | 68ms | +0ms | [-6ms, +4ms] | 0.351 | within noise |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 68ms | 68ms | +0ms | [-6ms, +4ms] | 0.351 | within noise |
| TTFB | 2.45ms | 2.1ms | -0.35ms | [-0.5ms, -0.2ms] | 0.002 | significant |
| JSHeapUsedSize delta | 185.2KB | 185.2KB | +16B | [-23.8KB, +36.2KB] | 0.875 | within noise |
| DOM node delta | 203nodes | 203nodes | +0nodes | n/a | n/a | within noise |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 31610ms | 31607.5ms | -2.5ms | [-6.5ms, -1ms] | 0.011 | measurable |
50 assertions, 0 churn/s — Unthrottled
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 76ms | 70ms | -6ms | [-8ms, +0ms] | 0.025 | measurable |
| CLS | 0.071 | 0.071 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 76ms | 70ms | -6ms | [-8ms, +0ms] | 0.025 | measurable |
| TTFB | 2.2ms | 1.8ms | -0.4ms | [-0.7ms, -0.4ms] | 0.016 | measurable |
| JSHeapUsedSize delta | 546.4KB | 622.7KB | +76.3KB | [+70.4KB, +83.0KB] | <0.001 | significant |
| DOM node delta | 301nodes | 526nodes | +225nodes | [+225nodes, +225nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35146ms | 35152ms | +6ms | [+2ms, +9.5ms] | 0.007 | significant |
MutationObserver callback timing (3068 callbacks): P50 0ms, P95 0.3ms, P99 0.5ms
50 assertions, 0 churn/s — CPU 4x throttle
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 72ms | 72ms | +0ms | [-4ms, +8ms] | 0.415 | within noise |
| CLS | 0.071 | 0.071 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 72ms | 72ms | +0ms | [-4ms, +8ms] | 0.415 | within noise |
| TTFB | 2.2ms | 1.8ms | -0.4ms | [-0.55ms, +0ms] | 0.036 | measurable |
| JSHeapUsedSize delta | 550.9KB | 620.3KB | +69.4KB | [+67.3KB, +74.5KB] | <0.001 | significant |
| DOM node delta | 301nodes | 526nodes | +225nodes | [+225nodes, +225nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35222ms | 35229.5ms | +7.5ms | [+3.5ms, +12ms] | 0.002 | significant |
MutationObserver callback timing (3057 callbacks): P50 0ms, P95 0.7ms, P99 1.1ms
50 assertions, 100 churn/s — Unthrottled
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 80ms | 78ms | -2ms | [-8ms, +0ms] | 0.099 | within noise |
| CLS | 0.071 | 0.071 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 80ms | 78ms | -2ms | [-8ms, +0ms] | 0.099 | within noise |
| TTFB | 2.2ms | 1.85ms | -0.35ms | [-0.5ms, -0.25ms] | 0.001 | significant |
| JSHeapUsedSize delta | 1.4MB | 1.5MB | +92.4KB | [+89.4KB, +104.7KB] | <0.001 | significant |
| DOM node delta | 1802nodes | 2027nodes | +225nodes | [+225nodes, +225nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35159.5ms | 35174ms | +14.5ms | [+11ms, +18.5ms] | <0.001 | significant |
MutationObserver callback timing (14553 callbacks): P50 0ms, P95 0.1ms, P99 0.3ms
50 assertions, 100 churn/s — CPU 4x throttle
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 96ms | 80ms | -16ms | [-20ms, -4ms] | 0.005 | significant |
| CLS | 0.071 | 0.071 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 96ms | 80ms | -16ms | [-20ms, -4ms] | 0.005 | significant |
| TTFB | 2.4ms | 1.7ms | -0.7ms | [-0.9ms, -0.45ms] | 0.001 | significant |
| JSHeapUsedSize delta | 1.4MB | 1.5MB | +82.4KB | [+76.1KB, +87.9KB] | <0.001 | significant |
| DOM node delta | 1810nodes | 2035nodes | +225nodes | [+224nodes, +227nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35265ms | 35278ms | +13ms | [+5.5ms, +16ms] | 0.003 | significant |
MutationObserver callback timing (8632 callbacks): P50 0ms, P95 0.7ms, P99 1ms
200 assertions, 0 churn/s — Unthrottled
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 88ms | 84ms | -4ms | [-8ms, -4ms] | 0.008 | significant |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 88ms | 84ms | -4ms | [-8ms, -4ms] | 0.008 | significant |
| TTFB | 2.1ms | 1.8ms | -0.3ms | [-0.6ms, -0.15ms] | 0.005 | significant |
| JSHeapUsedSize delta | 789.0KB | 903.5KB | +114.5KB | [+111.4KB, +122.3KB] | <0.001 | significant |
| DOM node delta | 816nodes | 1706nodes | +890nodes | [+890nodes, +890nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35174ms | 35181ms | +7ms | [+1ms, +11ms] | 0.022 | measurable |
MutationObserver callback timing (3574 callbacks): P50 0ms, P95 0.3ms, P99 0.5ms
200 assertions, 0 churn/s — CPU 4x throttle
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 108ms | 88ms | -20ms | [-24ms, -14ms] | 0.001 | significant |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 108ms | 88ms | -20ms | [-24ms, -14ms] | 0.001 | significant |
| TTFB | 2.1ms | 1.6ms | -0.5ms | [-0.7ms, -0.4ms] | 0.001 | significant |
| JSHeapUsedSize delta | 787.3KB | 907.1KB | +119.8KB | [+95.8KB, +120.8KB] | <0.001 | significant |
| DOM node delta | 816nodes | 1706nodes | +890nodes | [+890nodes, +890nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35261.5ms | 35267ms | +5.5ms | [+3ms, +11.5ms] | 0.003 | significant |
MutationObserver callback timing (3547 callbacks): P50 0ms, P95 0.7ms, P99 1.1ms
200 assertions, 100 churn/s — Unthrottled
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 88ms | 92ms | +4ms | [-2ms, +6ms] | 0.139 | within noise |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 88ms | 92ms | +4ms | [-2ms, +6ms] | 0.139 | within noise |
| TTFB | 2.1ms | 1.8ms | -0.3ms | [-0.6ms, +0.1ms] | 0.117 | within noise |
| JSHeapUsedSize delta | 1.6MB | 1.7MB | +149.5KB | [+148.6KB, +157.8KB] | <0.001 | significant |
| DOM node delta | 2317nodes | 3207nodes | +890nodes | [+890nodes, +890nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35187.5ms | 35207.5ms | +20ms | [+17ms, +21ms] | <0.001 | significant |
MutationObserver callback timing (18173 callbacks): P50 0ms, P95 0.1ms, P99 0.3ms
200 assertions, 100 churn/s — CPU 4x throttle
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 90ms | 92ms | +2ms | [-4ms, +6ms] | 0.650 | within noise |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 90ms | 92ms | +2ms | [-4ms, +6ms] | 0.650 | within noise |
| TTFB | 2.3ms | 1.8ms | -0.5ms | [-0.7ms, -0.05ms] | 0.045 | measurable |
| JSHeapUsedSize delta | 1.6MB | 1.7MB | +152.2KB | [+142.6KB, +163.4KB] | <0.001 | significant |
| DOM node delta | 2317nodes | 3207nodes | +890nodes | [+890nodes, +890nodes] | <0.001 | significant |
| Long task count | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| Wall clock delta | 35304.5ms | 35329ms | +24.5ms | [+16ms, +27ms] | <0.001 | significant |
MutationObserver callback timing (14365 callbacks): P50 0ms, P95 0.7ms, P99 0.9ms
1000 assertions, 0 churn/s — Unthrottled
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 142ms | 148ms | +6ms | [+4ms, +12ms] | 0.006 | significant |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 142ms | 148ms | +6ms | [+4ms, +12ms] | 0.006 | significant |
| TTFB | 2.3ms | 1.85ms | -0.45ms | [-0.6ms, -0.05ms] | 0.025 | measurable |
| JSHeapUsedSize delta | 859.6KB | 976.0KB | +116.4KB | [+114.3KB, +124.7KB] | 0.001 | significant |
| DOM node delta | 3696nodes | 6546nodes | +2850nodes | [+2850nodes, +2850nodes] | <0.001 | significant |
| Long task count | 1.000 | 1.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 67ms | 90ms | +23ms | [+22ms, +23.5ms] | <0.001 | significant |
| Wall clock delta | 35270.5ms | 35285.5ms | +15ms | [+11.5ms, +21ms] | <0.001 | significant |
MutationObserver callback timing (5247 callbacks): P50 0.1ms, P95 0.6ms, P99 0.8ms
1000 assertions, 0 churn/s — CPU 4x throttle
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 144ms | 152ms | +8ms | [-4ms, +12ms] | 0.092 | within noise |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 144ms | 152ms | +8ms | [-4ms, +12ms] | 0.092 | within noise |
| TTFB | 2.05ms | 1.7ms | -0.35ms | [-0.7ms, -0.4ms] | 0.001 | significant |
| JSHeapUsedSize delta | 859.8KB | 976.6KB | +116.7KB | [+115.2KB, +121.6KB] | <0.001 | significant |
| DOM node delta | 3694nodes | 6539nodes | +2845nodes | [+2845nodes, +2845nodes] | <0.001 | significant |
| Long task count | 2.000 | 1.000 | -1.000 | [-1.000, -1.000] | 0.002 | significant |
| Long task total ms | 119ms | 90ms | -29ms | [-30ms, -4ms] | 0.002 | significant |
| Wall clock delta | 35466.5ms | 35485ms | +18.5ms | [+15ms, +27ms] | <0.001 | significant |
MutationObserver callback timing (4976 callbacks): P50 0.3ms, P95 1.1ms, P99 2.2ms
1000 assertions, 100 churn/s — Unthrottled
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 144ms | 154ms | +10ms | [+6ms, +14ms] | 0.007 | significant |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 144ms | 154ms | +10ms | [+6ms, +14ms] | 0.007 | significant |
| TTFB | 2.1ms | 1.7ms | -0.4ms | [-0.7ms, -0.2ms] | 0.005 | significant |
| JSHeapUsedSize delta | 1.6MB | 1.8MB | +140.4KB | [+137.3KB, +142.8KB] | <0.001 | significant |
| DOM node delta | 5197nodes | 8047nodes | +2850nodes | [+2850nodes, +2850nodes] | <0.001 | significant |
| Long task count | 1.000 | 1.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 71.5ms | 95ms | +23.5ms | [+23ms, +25ms] | <0.001 | significant |
| Wall clock delta | 35281.5ms | 35298.5ms | +17ms | [+14ms, +25.5ms] | 0.002 | significant |
MutationObserver callback timing (19535 callbacks): P50 0.1ms, P95 0.2ms, P99 0.6ms
1000 assertions, 100 churn/s — CPU 4x throttle
| Metric | A (without agent) | B (with agent) | Delta | 95% CI | p-value | Significance |
|---|---|---|---|---|---|---|
| LCP | 148ms | 160ms | +12ms | [+8ms, +16ms] | 0.016 | measurable |
| CLS | 0.000 | 0.000 | +0.000 | n/a | n/a | within noise |
| INP | 0ms | 0ms | +0ms | n/a | n/a | within noise |
| FCP | 148ms | 160ms | +12ms | [+8ms, +16ms] | 0.016 | measurable |
| TTFB | 2.1ms | 1.6ms | -0.5ms | [-0.7ms, -0.1ms] | 0.035 | measurable |
| JSHeapUsedSize delta | 1.6MB | 1.7MB | +101.5KB | [+78.3KB, +113.7KB] | <0.001 | significant |
| DOM node delta | 5168nodes | 7896.5nodes | +2728.5nodes | [+2719nodes, +2739nodes] | <0.001 | significant |
| Long task count | 2.000 | 2.000 | +0.000 | n/a | n/a | within noise |
| Long task total ms | 129ms | 151ms | +22ms | [+20.5ms, +23.5ms] | <0.001 | significant |
| Wall clock delta | 35510.5ms | 35549ms | +38.5ms | [+35ms, +54ms] | <0.001 | significant |
MutationObserver callback timing (14953 callbacks): P50 0.4ms, P95 1ms, P99 1.4ms
Methodology
Each configuration runs a React 19 stress harness with configurable assertion density and background DOM churn. Assertions cycle through 8 archetypes (click→updated, click→added, click→removed, input→visible, submit→conditional, mount→visible, invariant→stable, click→OOB chain) to exercise all resolver code paths.
MutationObserver callback timing is captured by wrapping the MutationObserver constructor before agent load, adding performance.mark/measure around each callback invocation. The wrapper adds <0.01ms overhead per callback.