pollora/framework
Pollora Framework brings Laravel's toolkit to WordPress development, letting you build themes and plugins with Blade templates, Eloquent models, service providers, and familiar Laravel conventions while staying fully compatible with WordPress.
Pollora is a Laravel-native WordPress framework (Blade, Vite, service container and artisan tooling over WordPress). The delta under review is v13.36.1 → v13.38.1. v13.38.1 is a bugfix-plus-hardening release, not an architectural one: no new packages, no namespace moves, no contract changes. It fixes local-environment breakage (scheme-less APP_URL, Valet/Herd self-redirect loop, /cms/wp-admin/ 404) and adds two diagnostics (Site Health check for .env exposure, pollora:doctor warning for APP_URL without a scheme). The v13.36.1 decomposition and the pollora/query 2.0 semantics risk remain the dominant items and are unchanged.
APP_URL is read as http://… for WP_HOME, WP_SITEURL, cookie path and console host) and request dispatch (a PHP file that has included the front controller counts as Laravel serving the request; a request for a public/ directory holding an index.php is routed to that file). Both are pragmatic fixes for Valet/Herd, but they move environment-detection heuristics into the framework's request lifecycle — the layer where surprises are most expensive.APP_URL format, and subdirectory installs (/cms/). Teams already on 13.36.1 should treat 13.38.1 as a should-take patch.pollora/query ^1.0 || ^2.0 and the silent result-set changes (where()/orWhere() grouping, inclusive DateQuery, 24-hour clock) plus the new QueryException throws are unchanged and still the highest-severity item. Nothing in v13.38.1 mitigates or narrows it.APP_URL is now repaired as http://, not rejected. On a developer laptop that is exactly right; on a misconfigured staging or production .env it silently converts an https:// site into an http:// one — cookie path, canonical URLs and asset origins follow — and the only signal is a pollora:doctor warning that says what to write. This trades a loud 500 for a quiet downgrade, which is the wrong direction for prod.public/ directory that holds an index.php is now sent to that file" is a routing rule, not a bugfix scoped to Valet. Verify it does not expose or shadow anything in our public/ tree, and that the included-front-controller detection cannot misfire on Bedrock or other web/-rooted layouts where the entry point is included by a bootstrap..env check performs an HTTP request to /.env. Behind a catch-all front controller, a WAF, basic auth or an edge cache, the response is not a reliable proxy for "the file is served" — expect false positives (page HTML returned) and false negatives (403 from the WAF masking a genuinely served file).Infrastructure\Laravel namespace moves, and the AssetFile::resolveUsing() resolver bootstrap requirement all carry over unchanged.APP_URL coercion environment-aware (dev-only), or does it apply in production? If the latter, can it be made a hard failure outside local?pollora/query matrix published and lockstep-released? (carried over, still unanswered)Infrastructure\Laravel classes ship aliases or a deprecation shim? (carried over)pollora/query ^1.0? (carried over).env probe distinguish "served the file" from "served the app's 200 page", and does it run on every Site Health load (self-request cost) or only on demand?pollora:doctor now detect package/framework version skew, or still only configuration problems? (carried over — the new APP_URL check suggests the check suite is growing, but not that it covers skew)vendor:publish? (carried over).env files. Nothing about how a Pollora site is built changes.pollora/query 2.0 upgrading guide; inventory queries using where()/orWhere() chains, DateQuery, fields(), orderBy() direction and userPermission(). (unchanged — still step one)pollora/query pinned to ^1.0 in a branch to isolate the decomposition from the query semantics change. Take 13.38.1 in the same pass — there is no reason to stage two upgrades.MetaServiceProvider, LaravelMetaValidator, TypedMetaCheck, MetaListCommand, MetaAuditCommand, RoleServiceProvider, EnsureUserHasRole, RoleDirective, RolesCheck) and fix namespaces.AssetFile/AssetManager/MissingBuilds and any MetaUiDrivers or extend() callback for the new resolver and PSR-11 signature.APP_URL audit across every environment. Assert an explicit scheme everywhere; treat any scheme-less value found in staging or production as a defect, not a value the release will fix for you. Confirm pollora:doctor is green on each environment after the bump.public/, then exercise /, /wp-admin/, /cms/wp-admin/, a public/ subdirectory containing an index.php, and /.env — on Valet/Herd and on the production-like nginx/Apache target, since the new rules are dispatch-level.pollora/query 1.x/2.0 dual support is a bridge, not a resting state — plan for 2.0-only. The AssetFile::resolveUsing() resolver must be set by the provider, so any bootstrap that bypasses AssetServiceProvider will fail silently. New: the front-controller detection assumes the entry point is included by the server wrapper; validate on any deployment where index.php is reached differently.APP_URL + docroot + routing verification per environment → (6) asset + preview route verification in build and hot mode → (7) Site Health / doctor green check on every environment → (8) CI lockfile and vendor:publish updates → (9) rollout with the pinned branch retained as rollback.pollora:doctor and Site Health now cover two additional misconfigurations, so the pre-deploy checklist grows slightly and gets cheaper. Version drift across the framework/package matrix remains the standing maintenance tax.pollora:install now resolves under Valet/Herd (update any doc that tells people to hand-edit it), and "site 404s but files are fine" now has a first-line answer — check the document root, then Site Health's .env finding. The new failure text ("point the document root to public/") is good; capture it verbatim in the runbook. Scheme-less APP_URL should be added to the onboarding checklist rather than left to the doctor warning..env probe is an extra HTTP request on a rarely-loaded admin page — negligible, but confirm it is not on a hot path.where()/orWhere() grouping, inclusive dates, 24-hour clock — wrong content served, no error. Highest severity. (unchanged)APP_URL in staging or production is coerced to http:// — HTTPS assets, cookies and canonical URLs degrade with no error, only a doctor warning.QueryException from fields(), userPermission() or orderBy() direction that was previously ignored — a working page starts 500-ing. (unchanged)Infrastructure\Laravel namespace moves in app or third-party code. (unchanged)AssetFile resolver or unpublished block-bindings.js → missing build notice or missing editor behaviour. (unchanged)composer update. (unchanged)public/ directory with an index.php is served directly" rule and the included-front-controller heuristic change dispatch — smoke-test subdirectory installs and non-standard docroots rather than assuming the Valet/Herd fix is inert elsewhere..env probe false-positives/negatives behind catch-all routing, WAFs or basic auth — a red finding is not proof of exposure, and a green one is not proof of safety./wp-admin/ 404s, /cms/wp-admin/ 404s, and total Artisan failure from a scheme-less APP_URL. Good hygiene wins — credit them.MethodInvokerInterface, BindingEventsInterface, PostFinderInterface, the three asset contracts and PSR-11 in place of app() — roughly half a day per subsystem touched, plus a dedicated query-semantics audit before unpinning pollora/query. No additional ramp-up for v13.38.1 beyond the APP_URL/docroot checklist.How can I help you explore Laravel packages today?