--- capacity 2048 ---
  started, recorded steps: 2048
--- capacity 16384 ---
  started, recorded steps: 5400

=== which steps survive truncation (capacity 2048, 5400 available) ===

  $ curl -s localhost:8080/actuator/startup | python3 -c '...'
  events: 2048
  first 3: ['spring.boot.application.starting',
            'spring.boot.application.environment-prepared',
            'spring.boot.application.context-prepared']
  last 3 : ['spring.beans.instantiate', 'spring.beans.instantiate', 'spring.beans.instantiate']
  last tags: [{'key': 'beanName', 'value': 'bulk2718'}]
  names:   [('spring.beans.instantiate', 2029),
            ('spring.context.bean-factory.post-process', 9),
            ('spring.boot.application.starting', 1),
            ('spring.boot.application.environment-prepared', 1)]

The buffer keeps the FIRST 2048 steps and drops everything after. The timeline therefore
ends mid-instantiation, and 'spring.context.refresh', 'spring.boot.application.started'
and 'spring.boot.application.ready' -- the steps that bracket everything else -- are
absent, because a step is only recorded when it ENDS.

  $ grep -ic buffer app.log
  0

No warning. No exception. The endpoint returns 200 with a well-formed, truncated answer.
