laravel-workersv0.4.10

coverage

105 documentation pages, 0 blanks

The coverage index in MAP.md section C gives every Laravel documentation page a verdict. A blank verdict is a build failure, so the set below is exhaustive by construction.

15fits as-is
59fits with a documented trade
5platform wall
26not applicable at the edge
Coverage cells105 rows · 15 compile · 5 fail loud · 59 documented · 26 not applicable
One cell per documentation page, coloured by the four-way class in MAP.md section C, with the census palette plus grey for pages that are not applicable.

fits 15

  • configuration, frozen at build + secrets
  • contracts, type-erased; two-sided custom drivers
  • csrf, session token; @csrf/@method
  • deployment, build → wrangler deploy (D1 + assets)
  • frontend, Vite unchanged; proven
  • http-client, fetch (already HTTP)
  • installation, toolchain (§7)
  • lifecycle, §3 execution model
  • migrations, ops-time; remote via wrangler/SQL
  • pagination, kernel paginator
  • routing, compiled router
  • structure, §7 source of truth
  • testing, local PHPUnit + edge parity harness
  • urls, url/route/asset; signed URLs

… 1 more, all in the same class.

soft 59

  • ai-sdk, HTTP + streaming via fetch fits
  • authentication, kernel SessionGuard oracle-verified (M14); wired M15 to M20 (auth.test 4/4, login-flow E2E)
  • authorization, the Gate facade compiles: Gate::allows()/denies() answer from the compiled policy (the guest rules included); authorize()/any()/define()/before() fail loud
  • billing, Cashier via fetch; webhooks = HMAC routes (padanan)
  • blade, views compile (echo/if/loops/expr); the layouts compile too (M40: the sections travel to the layout, @extends/@section/@yield); the Blade components (<x-...>) stay a port
  • cache, the Cache facade + the cache() helper compile to the D1 database store; the tags need a taggable store (LW002, the D1 store has none, Laravel throws there too); a non-database driver fails the build (it would read and write a different store)
  • cashier-paddle, same as billing (padanan)
  • collections, kernel shim subset; fail loud per method
  • concurrency, Promise.all; 6-conn limit → batch
  • container, compile-time DI subset
  • context, request-scoped shim
  • controllers, M10/M17/M22/M23/M28: GET/POST/PUT/PATCH/DELETE actions compiled (one handler per verb); \->validate() + flash (M19); edirect()->intended() + session regen/invalidate (M20); FormRequests, Cache/Hash/Storage facades, class constants and Eloquent writes compile (M23/M28); the route-model binding compiles (M40: show(Post $post) fetches the model from the segment); pagination + Eloquent relations still a port; fail-loud LW002 (unsupported construct) / LW003; REQUEST_CALL synced to kernel (#2: date removed, str added)
  • database, D1 builder: where/or/join/group/having
  • database-testing, sqlite↔D1 parity harness

… 45 more, all in the same class.

hard 5

  • broadcasting, SSE/polling padanan; WS via DO/external
  • images, no GD/Imagick → CF Images or build-time
  • processes, no process spawning → off-edge padanan
  • redis, KV/D1 drivers; Upstash REST optional
  • reverb, WS server → DO/external/SSE padanan

not applicable 26

  • ai, dev tooling (Boost/AI guidelines)
  • artisan, local-only; edge CLI equivalents
  • boost, dev tooling only
  • console-tests, local; edge = parity harness
  • contributions, meta
  • documentation, meta (TOC page)
  • dusk, local browser tests
  • envoy, local (SSH deploys)
  • folio, NOT ported (0 code); Laravel Folio page routing unsupported
  • homestead, local VM
  • horizon, Redis dashboard; padanan CF dashboard
  • http-tests, local; parity harness covers
  • license, meta
  • mix, legacy; Vite is the path

… 12 more, all in the same class.

measured, not assumed

What the CPU budget actually did

The repository's tools/cpu-gate.mjs deploys a probe worker and reads the platform's own cpuTime and outcome back through wrangler tail. The cells below are copied from COMPILED.md, which records the run date and the probe worker's name, and the build asserts that every phrase they were transcribed from is still in that file.

Free plan: 10 ms CPU per invocation as documented; enforcement measured softer than the docs (a per-isolate rollover bank). Cells are the source's figures, shortened for width.
loadp50p95max / killwhat it is
page-like kernel load5 ms41 ms62 ms5 hot paths × 50 iterations, 200 requests / 4 connections
bcryptjs cost 10 (login path)93 to 104 msnot measurednot measuredkept off every per-page path; native PBKDF2 of at most 100k iterations = 22 ms fallback
burn control (must be caught)about 2020 msn/akilledFree plan kills a single over-budget request at cpu=2020 ms, 1102 exceededCpu

The p50 fits the 10 ms budget; the p95 tail is four times over it. The project states this itself and treats the tail as a design smell, not as headroom to spend.

feature map

49 rows, 7 areas

MAP.md section 5, one row per Laravel capability: what it maps to on the edge, whether it fits, and the plan letter that carries it.

Class per row comes from the row's own marker: fits, documented trade (soft), or platform wall (hard).
areaLaraveledge equivalentclassplan
A. Routing & HTTPBasic routes, paramsCompiled router (pattern match)fitsF
A. Routing & HTTPNamed routes, route(), url()Frozen name mapfitsF
A. Routing & HTTPRoute groups / middlewareCompiled pipelinefitsF
A. Routing & HTTPRedirectsResponse redirectfitsF
A. Routing & HTTPSigned URLsHMAC in kernelfitsF
A. Routing & HTTPRoute model bindingCompiled lookupsoftF
A. Routing & HTTPCustom middlewareCompiled like controllersfitsF
A. Routing & HTTPThrottle middlewareCounter in D1/KVfitsF
A. Routing & HTTPCSRFToken in session storefitsF
A. Routing & HTTPCookie encryptionLaravel Encrypter parity (AES-CBC + HMAC) via WebCryptofitsF
B. ViewsEcho, @if/@foreach/@include/@extends/@section...Compiled JS render fnsfitsF
B. Views@vite / @fontsRuntime shim reading build manifestfitsF
B. Views@php blocksRestricted subsetsoftF
B. ViewsBlade components (x-..., slots)Phase 2softF
B. ViewsCustom directivesRegistered rendererssoftF
C. App codeControllers / closuresPHP-subset → JSfitsF
C. App codeService classes / helpersPHP-subset → JSfitsF
C. App codeForm RequestsCompile rules + authorizefitsF
C. App codeValidationRule subset in kernel; unique/exists via D1softF
C. App codeEvents / ListenersSynchronous compiledfitsF
C. App codeExceptions / error pagesKernel map → static error pagessoftF
D. DataMigrationsPHP-side, applied to remote D1 (SQL export / wrangler)fitsF
D. DataSeeders / factoriesLocal + SQL importfitsF
D. DataEloquent CRUDGenerated model metadata + D1softF
D. DataRelationshipsincludes / eager subsetsoftF
D. DataCasts / accessorsCompiledsoftF
D. DataQuery builder subsetKernel builder → SQLsoftF
D. DataRaw SQLPass-through to D1fitsF
D. DataTransactionsD1 atomic batch()softF
D. DataPaginationLength-aware paginatorfitsF
D. DataSearchD1 (SQL LIKE / FTS5); vector → CF Vectorize padananfitsF
E. State & securitySessionsD1-backed store + encrypted cookiefitsF
E. State & securityAuth (guard, login/logout, remember)Kernel + D1 usersfitsF
E. State & securityPassword hashingbcrypt via bcryptjs ($2y$ parity)fitsF
E. State & securityRate limitingD1 counters (cache table)fitsF
F. Platform servicesMailHTTP providers (Resend etc.) via fetchsoftF
F. Platform servicesQueues / JobsCloudflare Queues (a limited version on the Workers free plan; the paid plan charges per operation - 10,000 operations/day included on the free plan) or D1 queuesoftF
F. Platform servicesSchedulerCron Triggers → one dispatcher reads schedulesoftF
F. Platform servicesCacheD1 database store (Laravel parity) + KV cache-asidefitsF
F. Platform servicesStorage / filesystemUploads → R2 or the D1 blob store; file_exists/public_path → build-time snapshotsoftF
F. Platform servicesHTTP clientfetchfitsF
F. Platform servicesLoggingConsole + optional external sink via fetchsoftF
F. Platform servicesRealtime / WebSocketsPolling / SSE; Durable Objects beyondhardF* / $
F. Platform servicesi18nLang frozen to JSON; pluralization subsetsoftF
G. Frontend / DXVite buildUnchangedfitsF
G. Frontend / DXArtisanLocal only; edge CLI (build/ship)fitsF
G. Frontend / DXPHPUnitLocal unchanged; parity suite addedfitsF
G. Frontend / DXLivewire / Inertia / FilamentOut of v1; Inertia feasible (JSON port) phase 3; Livewire hardhardlater
G. Frontend / DXTelescope / Horizon / DebugbarLocal-only toolsnot-applicableF

provenance

Where each figure comes from

Nothing in this audit is typed by hand: scripts/extract-lw.mjs reads the repository and scripts/verify-lw.mjs fails when a figure drifts from the file it was read out of.