Repository navigation
Add qualified Laravel FPM and optional Octane recipe - #169
Conversation
|
HTTP request-isolation preparation now passes on exact candidate
All 200 requests preserve the current user, fixed namespace, request ID and optional header. Independent readback verifies exactly one matching log-context record for each request, including null context when the header was omitted. Each cohort refuses absent application auth, another namespace and invalid request IDs. Both HTTP workers were observed in every profile. Final FPM/nginx shutdowns exit 0, no OOM or container restart; the task containers and network are removed. Normally installed PHP SDK 2.4.0 source/dist is Preparation caught and corrected an example guard: Octane bootstraps through CLI, so These context requests perform no runtime operation. No Server worker or workflow was admitted. They do not qualify backend namespace authorization, durable execution, CLI recovery, cache replay, timers or performance. Those are the next gates on #112. Exact-head hosted normal checks remain pending; the draft stays open. |
|
The service application has actual normal-installed lifecycle results on immutable PHP Server 2.7.1, image Exact application Teardown caught an example defect: the FPM base image defaults to SIGQUIT, so the original durable CLI worker exited 131/no OOM. Those originals keep that failed shutdown result. Current candidate Setup failures are explicit: the first empty database-directory bind hid published migrations/seeder; the named-volume correction precedes any admission. The first shutdown-control provision reused a revoked token and was refused before registration; its unadmitted partial namespace was retired, then fresh credentials were used. All roles/namespaces are now retired and task containers/networks/volume are absent. This remains a draft qualification slice. CLI SIGKILL/cold recovery, cache/lost-connection controls, the full namespace/lifecycle matrix, three performance pairs, drift and soak remain open. No measured Octane benefit or full #112 delivery is claimed. The original Server 2.7.1 tuple is retained as its own result, independently of the later 2.7.2 dependency work. |
|
The separate worker replacement control passes on application source One original The same original workflow/run completed within its declared 90-second observation budget, observed at 18:32:22 UTC. The entire six-event prefix and accepted 600/900-second deadline fields stayed unchanged. Final history has eight events, one An initial control-plane setup request used the worker-protocol version in the independent control-plane header and received 400 before namespace or workflow admission. Correcting that fixture header to control-plane version 2 allowed fresh namespace/role creation; no runtime/SDK source correction occurred. Both roles were revoked with HTTP 200 and namespace absence verified as 404. All application/runtime containers, database, network, unique tool image/stages and disposable dependencies/data/credentials were removed by 18:35 UTC. Existing failed SIGQUIT teardown remains failed. This qualifies this one CLI replacement path; cache expiry/eviction, runtime connection loss, broader namespaces, paired performance and soak remain open under #112. |
|
The fresh cache qualification attempt is unqualified on unchanged example source The first declared profile uses cache capacity 100 / TTL 1 second and a 90-second original observation budget. Its original reached one completed activity and a persisted signal wait. The counter checkpoint then refused because the active worker's public The planned expiry assertion stopped at that failed checkpoint. A later diagnostic signal completed the same original outside the qualification budget; SQL reads show completed status, 11 events, four completed first-attempt tasks and zero repairs. That does not rescue the failed cache qualification, and no decoded-output acceptance is claimed here. Capacity-one eviction and network interruption were never run or admitted. Read-only PHP source inspection shows that workflow completion can write Next: establish a trustworthy counter observation using the normal SDK/HTTP path, reproduce any projection loss, then rerun separate new expiry/eviction/connection originals before performance work. No runtime/SDK fix, deadline change, historical cause or full #112 acceptance is claimed. Normal worker shutdown exits 0/no OOM/restarts. Both roles revoke 200, namespace absence is 404, and all task containers, database, networks, images, dependencies, credentials and raw scratch are removed before the coordinated host interval. |
|
Published-profile follow-through for #112: PR #169 now pins only SDK 2.4.1 (source/dist Before admission, the first new cache profile is fixed to normal Artisan CLI, immutable Server 2.7.2 / Workflow 2.5.20, isolated SQLite/file cache, SDK cache capacity 100 / TTL 1 second, worker 1 CPU / 320 MiB / no swap / no restart. One original signal-waiting workflow retains its 600-second run and 900-second execution budgets; observation is 90 seconds, with a three-second idle interval before release. Require exact typed output, preserved full history prefix and original deadlines, same worker process/registration, and actual shutdown cache counters. No rescue, reseed or repair. The SDK's published shutdown diagnostics now supply counters; absence is a failed observation, not zero. Eviction and connection-loss profiles remain separate and unadmitted. An initial preparation command used port 80 instead of this image's 8080 listener and failed before namespace/workflow admission. The endpoint was corrected before the new original. This is setup, not a product failure or rescued workflow. No Octane performance, full #112 acceptance, Cloud or frozen-cohort claim follows. |
|
The new published 2.4.1 / Server 2.7.2 CLI expiry original passes: Actual published shutdown diagnostics report The next separately named original profile freezes capacity 1 / TTL 300, the same immutable installed tuple and CLI resources, two signal-waiting originals (target then neighbor), each retaining 600/900-second deadlines within one 90-second observation. It requires actual capacity eviction counters, exact prefixes/results and surviving neighbor, same process, and normal shutdown. Connection loss remains separate and unadmitted. No full #112 or performance claim. |
|
Capacity eviction now passes both actual originals: Before the separate connection-loss admission: same published SDK 2.4.1 / immutable Server 2.7.2, cache capacity100/TTL1, one original signal-waiting workflow, 600/900-second deadlines, 90-second observation and identical CLI resource limits. Use the recipe's normal |
|
The ten-second Docker network-disconnect original completed in 27.722 seconds with preserved prefix/deadlines/exact result, no automatic restart. However no SDK transport error was observed, so it does not qualify the stated connection-error recovery gate. A distinct prospective control now freezes the same tuple/resources/cache/90-second observation and 600/900-second original deadlines, with the normal CLI supervisor. Once a fresh original is canonically waiting after its activity, stop only this isolated test API for ten seconds, then start the same API container on its unchanged database/image. Require a real SDK connection refusal, report automatic worker replacements, then release the same selected original. No production runtime, manual worker restart/repair, seed replacement or deadline extension. The earlier network observation remains separately limited. |
Published cache/reconnection controls and reusable driverPR #169 source Actual controls pass:
All nine original runs complete exactly once with the complete pre-release history prefix, one echo activity, exact int64/null/Unicode result and unchanged 600/900-second deadlines inside their 90-second observations. Independent SQLite audit: 36 completed first-attempt tasks, zero repairs, one worker owner per run. Every CLI exits0/no OOM/restart; all registrations are removed. Final recipe-driver eviction repeats actual hit0/miss6/eviction3/forced-cold4. Two isolated roles revoked200; namespace deletion200 and absence404 verified. The initial wrong-port preparation failure and the network-only observation remain separately limited. Fresh exact-head hosted checks are pending. This qualifies CLI cache/reconnection behavior; FPM/Octane paired measurement, soak and overall #112 acceptance remain pending. No Cloud, native/shared, frozen cohort, authority policy or SDK-major claim. Disposable local data/logs/dependencies and runtime resources are being deleted; the driver and this readable outcome are retained. |
|
Current candidate is The load fixture uses standard k6 arrival-rate executors, counts every expected admission and terminal result, keeps the original 35-second observations, and records HTTP worker identities. Its native k6 configuration inspection passes. The separate installed PHP reader checks exact typed outputs, canonical event counts and persisted timer timestamps. The actual HTTP load/reader smoke and the fixed FPM/Octane pairs, drift recheck and mixed soak remain pending. No performance result or Octane recommendation follows from these source checks. Published-package cache and connection controls remain the separate qualified receipt. |
|
Functional qualification of the example driver is complete at Three original calibrations remain unsuccessful: the first dropped two offers, the second dropped one context offer while the client pool was growing, and full preallocation then exposed a sixth workflow admission at the terminal scheduler boundary. Those outcomes are not relabeled. The correction preallocates the existing maximum client pool (8 context / 16 workflow VUs) and checks the finite offer index and original admission window before HTTP mutation. Maximum concurrency, 6 context reads + 1 workflow per second, 35-second workflow observations, 36-second drain and exact count/error/zero-drop gates are unchanged. Extra terminal scheduler iterations issue no request. Two subsequent five-second functional profiles pass, first FPM and then Octane:
Both installed readers verify exact int64/null/Unicode outputs and the actual timer event. These are short functional controls on one isolated backend, not independent measured pairs or evidence of an Octane performance benefit. The normal installed tuple is PHP SDK 2.4.1 / After stopping the SDK/HTTP/queue/scheduler roles, an independent read-only SQL audit accounts for all five profiles: 26 runs (21 completed / 5 cancelled), 206 history events, 62 completed workflow tasks, 26 completed activity tasks and 5 completed timers, all first-attempt; 5 cancelled timers never claimed. Repairs, retried tasks, live tasks, registrations and failed jobs are all zero. Original run timeout remains 600 seconds. The normal CLI and Octane shutdowns exit 0 with no OOM/restarts. Shutdown cache counters are retained-history observations, not live Fiber-retention measurements. Both roles are revoked and the namespace independently returns 404. All task containers, volumes, network, built application image and task-pulled Server image are removed; preexisting/foreign images remain untouched. Disposable raw records, dependencies and the test sandbox are deleted after verifying this readable outcome. All 33 applicable exact-head hosted checks now pass in 38647502357; conditional connected cancellation is explicitly skipped. Three independent measured FPM/Octane pairs, baseline drift, mixed-request soak and final review remain required. PR #169 remains draft; no full #112 acceptance or capacity claim. |
|
Current published-tuple controls pass their workflow/history criteria on SDK 2.4.2 /
All four originals retain complete prefixes, one scheduled/started/completed activity each, exact typed results and original deadlines. Read-only SQL confirms every task first-attempt, zero repairs/pending tasks and exact 600/900-second deadline offsets. The outage records real cURL error 56 and three automatic CLI restarts, with no manual CLI restart or history repair. The same original completes inside its original 90-second observer. This qualifies supervised recovery, not same-process recovery. The final replacement's counters do not stand in for missing counters from crashed processes. The normal expiry/eviction profiles stop with zero registrations and all roles exit0/no OOM/restart. The intentional outage leaves one retained registration, and its otherwise clean teardown triggers the wrapper's overly strong zero-registration/zero-restart predicate. That wrapper result remains failed; isolated database, containers and network are removed at 19:23:22 UTC. The checker now permits explicitly declared crash-control observations while keeping zero registrations/restarts mandatory for ordinary measured cells. Workflow deadlines, histories and driver assertions are unchanged. FPM's current-tuple lifecycle, eager/lazy reload and SIGKILL/cold replacement are recorded separately. Final source CI/Sonar/boundaries pass, zero unresolved Sonar PR issues. The fresh current-tuple three pairs, baseline drift and mixed reload soaks are now proceeding; full #112 acceptance remains open. |
|
The three current published-tuple pairs are complete on runtime source
The third pair's application CPU differs by only 0.35%. Mean charged application memory across the three pairs is 88.82 MiB FPM versus 191.57 MiB Octane. These observations do not justify a universal speedup or durable execution gain. FPM remains the ordinary starting profile. The fresh FPM drift check is now running. Both 300-second mixed soaks, each with two real HTTP reloads, remain required before final recommendation and delivery. No failed or older-package observation has been relabeled. |
|
The first two-worker FPM mixed soak on The two-worker short windows and drift remain their own passing workload. They do not establish capacity for synchronous query waits under mixed traffic. Prospective runtime source |
|
Four-worker source The complete 300-second mixed run with a two-CPU backend API still FAILS: 233 admitted, 174 observed completions/44 cancellations, 1728 context responses, 140 dropped iterations and one original observer failure. Canonical readback has 185 completed/44 cancelled/four waiting originals and 118 repairs. Original deadlines remain exact. Actual API CPU is 514.73 seconds over 302.99 seconds, with 38.32 throttled seconds. No failed observation is being converted into acceptance. I checked the maintenance command against exact published Server 2.8.6: its broad recovery pass is also in the published Compose stack. This does not establish a fixture-only maintenance defect or an SDK defect. No maintenance/runtime/dependency patch follows from that inspection. The next fresh isolated run changes only the separately declared API allocation to four CPUs/1 GiB on the same host. Application limits, four-worker source, database allocation, public packages, rates, VUs, original observers and drain remain unchanged. Any final FPM/Octane comparison must use that same declared backend allocation for both profiles. The prior two-CPU results stay separately scoped. All ten roles from the failed run exited0/noOOM and were removed. |
|
The corrective package is now included in fully published and independently qualified Server 2.8.7 / The next SDK #112 consumer preparation is I am preparing fresh ordinary context/lifecycle/cold/typed checks and the unchanged mixed/reload cohort. It uses a separate test host and synthetic namespace, with every role and teardown owned by this qualification. Earlier mixed runs remain failed. The issue stays open until the affected published HTTP consumer is actually qualified; no renewed hosting recommendation, capacity, speedup or broader historical-cause claim follows from the version update alone. |
|
Published Server 2.8.7 / Workflow 2.5.32 and normal PHP SDK 2.4.2, application preparation
The cache cells preserve exact histories, typed outputs and deadlines, with twelve completed first-attempt tasks, zero repairs, retried or pending tasks. Each normal ten-role stack exits 0 without OOM/restarts and deregisters fully; its containers, volumes and network are removed. Effective process and loaded Laravel settings are read before each admission. An earlier intended TTL control used the default TTL 300 because the private experiment helper exported defaults over Compose's requested settings. Its workflow completed, but its expiry assertion failed and it remains unqualified for expiry. A second setup used the same defaults and was retired before business admission. The helper was corrected before the fresh cells above; application and vendor bytes were unchanged. These new originals do not relabel the earlier attempts. The separate actual ten-second API outage also passes on the same original within its unchanged 90-second observation cutoff: exact history prefix, typed output/deadlines, four first-attempt tasks and zero repairs, retries or pending tasks. It records real transport errors and three automatic CLI restarts. This is supervised replacement, not same-process recovery. The intentional failures leave one stale registration; the replacement and all other roles exit 0/no OOM, and the entire stack is removed at 23:25:05 UTC. Final-replacement cache counters are 0/1/0/0. The fresh 300-second mixed/reload gate is now preparing its fresh stack and warmup. This remains scoped functional progress, not final hosting, load, capacity or Workflow #819 affected-consumer acceptance. Earlier mixed-run failures remain failed. |
|
The new published Server 2.8.7 / Workflow 2.5.32 mixed FPM original remains FAILED. The report at There is also a confirmed fixture defect: late-window assertions trigger immediate k6 abort, interrupting thirteen observers before the declared drain. The correction refuses late admissions, preserves every success threshold and original 35-second observer/36-second drain, and evaluates failure after in-flight observers finish. The real synthetic HTTP counterfactual fails on the parent (only2/5 terminal observations), passes on the correction (5/5, with injected error still requiring exit99), and passes its clean case (5/5,exit0). It is a driver regression check, not workflow qualification. Normal CI now runs both cases. New head All phase containers, networks, volumes, database/raw data, dependencies and the isolated measurement host are removed. Next is exact source qualification and diagnosis of delayed first claims/repairs before another load submission. Earlier failed originals retain their original outcomes. |
|
The published-SDK claim diagnostic is complete. New head Normal SDK 2.4.2 / The single worker stays busy with actual HTTP requests during the backlog; workflow poll replies while work is queued take at most 0.470 seconds. Cross-kind wake returns the existing The prospective override uses two independent Artisan workers at 0.5 CPU / 160 MiB each, keeping the full application at 2 CPUs / 1 GiB. Rendered FPM and Octane Compose configurations verify replicas, total CPU/memory, no-swap limits, UID 1000 and SIGTERM. This configuration still needs actual Laravel lifecycle, cache, recovery, shutdown and fresh strict load/pair acceptance. Base one-worker defaults and all failed originals remain unchanged. New-head normal CI 39080884852 is pending. Sonar 39080884894 and the exact-head app check pass; direct API review confirms all A ratings, 0.0% new duplication, 100% hotspot review, zero OPEN/CONFIRMED findings and no ignored conditions. The public boundary passes. Prior All diagnostic apps, databases, volumes, network, dependencies, caches, raw observations and temporary credentials are removed. Next: qualify the pool with the normal Laravel application, then use a separate isolated host for fresh load with the corrected drain driver and unchanged rates/budgets/thresholds. Draft #169 and all #112 acceptance criteria stay open. |
|
The first two-process FPM mixed run remains FAILED on
The prospective driver waits for the explicit activity-ready query phase inside the same original 35-second cutoff, and reserves sixteen context virtual users to sustain the unchanged six context requests per second through reload latency. Workflow VUs remain sixteen. Offered workflow rate, application allocations, deadlines, drain and strict success criteria are unchanged. These are new inputs requiring new originals. The prior run stays failed. New constructed HTTP controls reproduce both old-driver failures before testing the correction. This is qualification-driver work, with no SDK or Server runtime edit. Full pool cache/crash/outage acceptance, both mixed soaks, three alternating pairs, drift and final onboarding remain open. Final source is |
|
Fresh two-process FPM cohort PASS on exact source
Exact normal CI 39082974883 passes all 32 applicable jobs, with only the conditional connected-cancellation skip. Sonar 39082974879 and its app check pass; direct API review finds all A ratings, 0.0% new duplication, 100% hotspot review, zero OPEN/CONFIRMED issues and no ignored conditions. Both boundary checks pass. Earlier failed originals stay failed. This is one successful FPM cohort, not final #112 acceptance or a comparison. The separate two-process cache/recovery controls are running next. Octane, repeated pairs, drift and final onboarding/main qualification remain open. |
|
The two-process FPM cache and recovery controls also pass on
All seven originals retain their whole history prefixes, exact int64/null/Unicode results and original 600/900-second deadlines. Their fixed 90-second observation cutoffs are not reset. SQL shows zero repairs, retried tasks or pending work. The four capacity originals are checkpointed before any release, exercising two independent caches. Both deliberately killed CLI containers have exit137/noOOM, followed by successful normal replacements. The API-outage workers restart three and six times. It establishes supervised recovery, not same-process recovery. The stopped API-to-healthy interval is 00:45:14.595260–00:45:31.093651 UTC, including the ten-second stopped hold and startup. Transport errors are actually observed. Final live roles exit zero/noOOM. Two original registrations remain after each intentional interruption; the outage's two stale IDs match recorded deregistration failures. They are removed with the disposable database. Normal cache-only cells deregister fully. All four stacks and their raw databases/logs/checkpoints are retired after immediate audit, retaining only small derived results for the final report. Octane's independently named fresh cohort is now qualifying its prerequisites and mixed soak. No earlier failed result is relabelled, and paired comparisons/drift/final delivery remain pending. |
|
The separate Octane mixed original on Correction Fresh FPM and Octane cohorts are required with this common driver. The earlier successful FPM 16-VU cohort retains its exact scope. No application/runtime defect, speedup or Octane hosting acceptance is inferred from these generator observations. FPM's separate pool cache/replacement/outage controls remain valid component results. Fresh common-driver FPM result: cohort Both scheduled reloads replace all four HTTP workers. The measured application uses 53.507 CPU seconds and mean/peak charged memory of 150.10/162.93 MiB; these are workload-specific costs. All eleven stack roles exit 0/no OOM/no restarts, registrations are zero, and runtime/database/raw are deleted at 01:07:23 UTC. Fresh common-driver Octane result: independent cohort Exact-source checks are complete: 36 SUCCESS and one explicitly conditional connected-cancellation SKIP. Sonar's app check and direct API pass with all A ratings, zero new duplication, 100% reviewed hotspots, no ignored gate conditions and zero OPEN/CONFIRMED findings. No profile/threshold adjustment is used. |
|
Both two-CLI-worker profiles now pass the cache/recovery controls against published Server 2.8.7 / Workflow 2.5.32 and normally installed SDK 2.4.2. The application and dependency bytes remain unchanged from the admitted common load-driver cohort
All controls have zero repairs/retries/pending work and individually checked final shutdown. Both profiles' eager/lazy request-context and actual reload controls pass. Every completed stack/database/raw set is deleted after readback. The first Octane expiry helper incorrectly required forced cold replay even after TTL expiry with a complete-history path; its original stays failed, actual The fixed three-pair comparison plus FPM drift is now running with fresh projects/databases and the unchanged rates, 35-second original observers, 36-second drain, 600/900-second deadlines and 2 CPU/1 GiB application allocation. First FPM short window passes all 120 workflows/720 contexts/360 tasks with zero errors/drops/repairs/retries/pending work; its stack/raw is retired. Final source/report/served-onboarding acceptance remains open. No SDK release or workflow execution speedup is claimed. |
|
The published-SDK hosting qualification is complete for the exact documented two-CLI-worker configuration. Final report/source is Three alternating FPM/Octane pairs and a fresh FPM drift cell all pass: seven cells, 120 original completions / 720 contexts / 360 first-attempt tasks each, exact typed output/history/deadlines, zero errors/drops/repairs/retries/pending work. Both previously reported common-driver mixed soaks and all final pool isolation/cache/recovery/reload controls also pass. Three-cell mean application CPU is 16.75 s FPM / 16.58 s Octane. That 1.05% difference changes direction by pair and is smaller than the final FPM baseline's 5.34% drift. Charged memory is 138.60 / 323.38 MiB. Octane improves small context reads, but these results establish no consistent CPU or workflow execution gain. Both profiles record zero history-cache hits. The report therefore recommends starting with FPM and retains Octane as an explicitly qualified optional hosting choice. The report includes separate p50/p95/p99, all component CPU/throttling/RSS/charged memory, response-body transport counts, timer latency and actual cache counters. Backend body bytes include metadata and inline history, so they are not represented as pure history bytes. All failed originals stay failed and linked. Every final cell shuts down with all eleven roles exit 0/no OOM/no restart and zero registrations. Actual experiment VM and task SSH key deletion is verified at 01:51:48 UTC, after all cell databases/raw samples were removed. Final exact-source CI/Sonar and fresh-main/served-onboarding acceptance remain pending. No package release, production-capacity or execution-speedup claim is made. |
|



Outcome
Add #112's runnable Laravel service HTTP application with ordinary PHP-FPM and optional Octane/RoadRunner. Independent supervised Artisan workers execute durable work. No core SDK requirement, package version or runtime dependency changes.
Start with FPM for this recipe. Both profiles pass the bounded functional/recovery/load qualification, but Octane does not demonstrate a consistent application CPU or workflow-latency gain and uses about 185 MiB more charged memory. Production capacity remains workload-specific.
Exact source and published inputs
Final source
516d13a22a35adedd71c67095cf7f33176e9ef44, whole tree70dea88627833b67c7c6978f9880c8cd111333a7. Measured application runtime/configuration remainse81b7c80, common driveraf741d1; final changes are documentation only. Normally installed SDK 2.4.2 /25d796ad, PHP 8.3.35, Laravel 12.69.3, Octane 2.21.0, RoadRunner 2025.1.15 and published Server 2.8.7 /964f9e3d/ immutable index27c08e15, Workflow 2.5.32 /78075b6f. All 166 installed SDK files and 51 application files are checked before admission.The tested override has four HTTP workers and two independent CLI workers under the combined 2 CPU / 1 GiB application allocation. Separate backend and generator costs are disclosed. Fixed offers are six context reads and one workflow per second, with original 35-second observers and 36-second drain.
Verified results
The qualification report includes p50/p95/p99, component CPU/throttling/RSS/charged memory, backend response bytes, timer latency, cache counters, commands and linked failed originals. Earlier failures remain failed; no common cause or replay/execution saving is claimed.
Delivery
Merged at
d3f9dd7373876148b8a356241c4af93434ba31a6, with the identical qualified whole tree. Fresh-main CI 39088255960, Sonar 39088255959, boundary and portal 39088255969 pass: all 37 applicable checks succeed, with only the opt-in connected-cancellation job skipped.The live Laravel guide links the runnable recipe; its deployment audit reports the exact merged revision. Served recipe/report bytes match the qualified source. Experiment stacks/databases/raw samples are deleted after immediate audit. The temporary host and task access key were deleted at 01:51:48 UTC, remaining local task data at 01:54:20, and the completed clean source worktree/branch are retired. #112 is delivered. No SDK release, native/shared adoption or frozen tuple change is implied.