--- 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.