[6.x] Grab bag refactors & fixes - #19448
Open
riasvdv wants to merge 16 commits into
Open
Conversation
📚 Storybook previews@craftcms/ui — open Storybook No changed components detected in this Storybook. resources/js — open Storybook No changed components detected in this Storybook. |
riasvdv
force-pushed
the
feature/grab-bag-refactors
branch
from
August 17, 2026 18:45
6a93fa9 to
c8759b7
Compare
riasvdv
force-pushed
the
feature/grab-bag-refactors
branch
from
August 17, 2026 18:50
c8759b7 to
d196bd0
Compare
riasvdv
marked this pull request as ready for review
August 17, 2026 19:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
A collection of refactors / fixes from both manual reviews/spelunking and a Codex review, bundled into one not-too-large PR. Click on each commit to review the individual changes.
Use Laravel database teardown API
Delegates schema teardown to Laravel’s cross-driver API, removing redundant driver-specific table enumeration and drop logic.
Fix Edition capability checks
Makes each
Editionreport capabilities from its own value, rather than potentially returning results based on the globally configured edition.Fix mixed element collection eager loading
Passes only class-compatible elements to eager loading, preventing mixed collections from sending incompatible elements to a type-specific loader.
Fix duplicate validation lifecycle
Runs throwing validation through one lifecycle, preventing validation hooks and their side effects from executing twice.
Use atomic job progress upserts
Replaces separate job-progress lookup, insert, and update paths with one atomic upsert, removing duplicated assignments and a concurrent-write race window.
Use exception-based JSON decoding
Uses native exception-based JSON decoding as the single parsing path, avoiding a second check against global parser error state.
Normalize forced-disabled plugin configuration
Normalizes supported forced-disabled plugin formats at the boundary so all lifecycle checks use consistent membership semantics.
Add request-scoped response headers
Moves response-header accumulation and core producers to request-scoped state, preventing headers from leaking between requests under long-lived or concurrent workers.
Improve FormResolver membership checks
Indexes control paths and node IDs once per resolution, avoiding repeated scans while preserving form output order.
Keep custom field query criteria sparse
Stores only explicitly supplied custom-field criteria, preserving the distinction between absent and explicit-null values and avoiding unnecessary query state.
Prevent stale user permission trees
Derives permission trees from current permissions and plugin contributions instead of retaining mutable cached state that can become stale.
Use GraphQL AST value decoders
Replaces duplicate handwritten AST conversion with the installed GraphQL library’s decoder while retaining Craft-specific query-condition validation.
Return verified passkey credentials explicitly
Returns verified credential data directly to persistence instead of transporting it through hidden session state, keeping independent authentication attempts isolated.
Replay structured HTML stack resources
Retains structured resource entries in the HTML stack so cache collection can replay them directly instead of rendering tags and parsing them back into data.
Keep search state local
Keeps parsed terms, groups, and query-building state local to each search, preventing nested or concurrent operations from overwriting shared service state.
Keep table validation errors beside values
Carries Table column validation errors in a row-and-cell sidecar map so persisted handles remain scalar through failed validation and rerendering.