lar-05 reproduction

Public source retained with the related article. Generated results, dependency directories, runtime storage, secrets, and oversized binary artifacts are intentionally excluded.

README

# LAR-05 Octane lifecycle fixture

This fixture compares a fresh Laravel CLI process per request with one real
Laravel Octane RoadRunner worker. The fresh control is not a PHP-FPM benchmark.

The application pins Laravel 13.20.0, Octane 2.17.4, PHP 8.4.12, RoadRunner
2025.1.15, its official image digest, and the RoadRunner PHP bridge. A declared
5,000-iteration SHA-256 loop in `AppServiceProvider::boot()` makes repeated
provider boot work visible. It is synthetic and does not represent an
application used by Brian or a production Laravel workload.

Run the current performance, response-equivalence, state-isolation, and memory
controls with:

```sh
./run.sh
```

The runner builds the pinned image, limits it to two CPUs and 1 GiB of memory,
retains every raw observation in `results/profile.json`, and runs the semantic
verifier. It records three trials at concurrency one and four after declared
warm-ups.

The fixture deliberately contains unsafe warmed singletons next to a scoped
binding and lazy request resolver. The unsafe cases are evidence controls, not
recommended application design.

The lifecycle runner also retains max-request recycling, crash replacement,
request timeout, activation versus reload, an in-flight request, failed
replacement readiness, rollback, and framework locale reset. RoadRunner's
Octane output reports why a worker stopped but not its exit code or signal; the
result records those fields as unobservable instead of inventing values.
The configured `max_jobs` boundary counts worker executions, including health
traffic, and did not act as an exact `/retain` request counter in the observed
run. The retained per-generation counts make that distinction inspectable.

The complete gate also inventories all 83 locked packages and both application
providers, retains 13 primary-source responses, rejects 20 isolated mutations,
records source and result provenance, and stores a clean committed-tree export.
`results/decisions/adoption.json` preserves the score-free adoption record and
the application evidence which this fixture cannot supply.

Retained files