# Intermediate checkpoint: bulk slack smoke v13

This is an exploratory checkpoint, not the final benchmark set.

## Scope

- MSVC baseline profile: Release `/O2`, `/MT`, compiler default ISA (no
  `/arch:AVX*`).
- `compare` suite, `smoke` scale, three repeats.
- Six value categories and 58 valid workload/size cells per complete
  candidate.
- Raw timings, per-cell medians, aggregate scores, and environment metadata
  are stored beside this file.

`std::deque` and `std::list` are external comparison baselines only.  The
adaptive candidate switches exclusively between vector and tiered storage;
`std::list` uses O(N) traversal to provide the benchmark's index semantics.

## Change under test

Bulk construction of tiered storage now fills each leaf to 7/8 capacity rather
than 100%.  The remaining 1/8 is deliberate insertion slack.  Previously the
first random insertion into almost every freshly built leaf forced a split and
a directory rebuild, so the benchmark measured an avoidable bulk-layout
pathology and the policy learned an artificially large leaf size.

## Current result

The hierarchical aggregate score is normalized to the best fixed baseline in
each cell; higher is better.

| Candidate | Score |
|---|---:|
| forced tiered, leaf 64 | 0.39608 |
| forced tiered, leaf 128 | 0.36662 |
| adaptive, deferred reads | 0.34673 |
| adaptive, eager non-const reads | 0.32499 |
| forced tiered, leaf 256 | 0.31051 |
| reserved `std::vector` | 0.29797 |

The new layout makes 64--128-element leaves the strongest fixed candidates in
this smoke matrix.  The deferred adaptive candidate is already ahead of the
vector baseline, but it is not final: stationary edit traces still show
unnecessary vector/tiered reversals and occasional repeated shape rebuilds.

## Safe continuation point

1. Add explicit read/edit phase hysteresis.
2. Preserve the long-term EWMA across a transition while resetting only new
   residency evidence; do not relearn from a noisy empty history.
3. Give full leaf rebuilds a separate, longer residency and a larger minimum
   improvement than directory-only changes.
4. Add regression tests requiring at most one storage switch and at most one
   leaf rebuild on a stationary 30k-edit trace.
5. Re-run paired `adapt`, then the three-profile quick holdout (scalar,
   baseline, AVX2).

## Source snapshot hashes

The repository had no initial commit at this checkpoint, so `git_head` is
empty.  These hashes identify the relevant source state:

```text
tiered_storage.hpp     EF6086BC3C5A348793BF70008092ABD680611478D577ED05187BE2D3391D2390
adaptive_sequence.hpp  060E7BCFC09B15EB2C20E076CE423EA3360B91915FBDB92A8D21303B1067B42F
adaptation_policy.hpp  9D0A08AE34121C2AB76B62495E479B6C79C0A1C331DDE3269493DAB13E3E6FE9
benchmark.cpp          AA7CA2D0EF5FEAA14BDCD8EAA44449462A8C981535A62F47588798B6D456B893
analyze_results.ps1    3BC214F7C869A99824E94F813FF380B00937DC4BE752FFB20D825F6A51B7866E
```

`adaptive_sequence.hpp` received a configuration-rollback safety fix after the
timing run.  It does not alter the measured fast path, but the benchmark should
be repeated after the pending policy work.
