Skip to content

Commit 84a7fe0

Browse files
lesnik512claude
andcommitted
docs(planning): reconcile herd change-file body to measured ~70x/~3x
The design body still carried the pre-measurement ~10x/~1.2x placeholders and a stale retry-ring mention. Align with the shipped model: httpware is bounded near its max_attempts cap (~3x) at demo scale, naive ~70x; ring is CB+timeout. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 60d367d commit 84a7fe0

1 file changed

Lines changed: 23 additions & 17 deletions

File tree

‎planning/changes/2026-07-19.02-resilience-demo-herd-and-enrich.md‎

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,24 +48,30 @@ plotting calls-into-the-backend per tick over a *sustained* outage window:
4848
clustering, not literal lockstep — arrivals are spread, fixed backoff *preserves*
4949
the clustering).
5050
- **httpware lane:** 20 clients, full-jitter backoff + per-client budget → jitter
51-
decorrelates retry timing into a near-constant rate; each client's own budget caps
52-
its own amplification.
51+
decorrelates retry timing into a near-constant rate; at this client count each
52+
client's `max_attempts=3` cap is what bounds its amplification (the per-client
53+
budget's floor doesn't bind until far higher per-client volume — it's the guarantee
54+
that holds as the herd grows).
5355

5456
Both lanes reuse the *real* retry + budget models from the engine's source-of-truth
5557
constants block, one model instance per simulated client. **Fidelity framing that
5658
must hold:** the budget is **per-client**, not shared across the herd — at demo
57-
traffic levels the *visible* flattening is jitter decorrelating timing; the budget is
58-
the ceiling that keeps even a *longer* storm under ~1.2×. Copy says exactly that; it
59-
must not imply a shared/global budget.
59+
traffic levels the *visible* flattening is jitter decorrelating timing, and
60+
httpware's peak is bounded near its `max_attempts` cap (~3×), with the per-client
61+
budget the ceiling that holds as volume grows. Copy says exactly that; it must not
62+
imply a shared/global budget or that the budget (rather than `max_attempts`) does the
63+
capping at this scale.
6064

6165
**Payoff metric.** The mini-tour spotlights the **peak load multiplier** — "backend
62-
saw N× baseline" (naive ~10×, httpware ~1.2×) — because it reads directly off the
63-
tallest spike the strip already draws (spotlight number == visible fact). **Total
64-
calls** during the outage is a secondary, un-spotlighted counter (volume story).
65-
"The flat rate leaves the backend room to recover" is the qualitative closing beat,
66-
*not* a spotlighted stat — httpware's code models no backend-recovery dynamic, so no
67-
invented recovery number. ~4 beats: outage hits → naive's first synchronized spike →
68-
httpware stays flat (jitter + budget) → peak-multiplier payoff.
66+
saw N× baseline". Measured against the fixed seed: **naive ~70×** (unbounded retries
67+
explode and keep climbing with outage length) **vs httpware ~3×** (bounded by
68+
`max_attempts` at this client count) — the number reads directly off the tallest
69+
spike the strip already draws (spotlight number == visible fact). **Total calls**
70+
during the outage is a secondary, un-spotlighted counter (volume story). "The flat
71+
rate leaves the backend room to recover" is the qualitative closing beat, *not* a
72+
spotlighted stat — httpware's code models no backend-recovery dynamic, so no invented
73+
recovery number. ~4 beats: outage hits → naive's first clustered spike → httpware
74+
stays flat (jitter + the `max_attempts` cap) → peak-multiplier payoff.
6975

7076
**Enrich pass.**
7177

@@ -103,11 +109,11 @@ size. Jagged failure shape is one `demos.css` change.
103109
`node --check docs/demos/engine.js`. Scratchpad jsdom harnesses extended: the
104110
existing `verify-demos.js` / `verify-real-page.js` drive every stop including the new
105111
herd mini-tour to completion without stalling; a herd trace asserts naive peak
106-
multiplier ≫ httpware peak (dramatic gap) and that both lanes use the shared retry +
107-
budget models. Manual: retry page reads micro → macro top-to-bottom under
108-
mkdocs-material light and dark; countdown ring animates and empties on retry / CB /
109-
timeout; failure shape distinguishable in grayscale; `prefers-reduced-motion`
110-
degrades to stepped updates.
112+
multiplier ≫ httpware peak (dramatic gap, ~70× vs ~3×), httpware bounded near the
113+
`max_attempts` cap, and a fine bucket count for a smooth strip. Manual: retry page
114+
reads micro → macro top-to-bottom under mkdocs-material light and dark; countdown
115+
ring animates and empties on CB / timeout; failure shape distinguishable in
116+
grayscale; `prefers-reduced-motion` degrades to stepped updates.
111117

112118
## Risk
113119

0 commit comments

Comments
 (0)