The engine named fields it does not own and assembled a shape it should not be able to spell. anchorScopes() rebuilt a saved line by reading place and section off the booking behind hasField() guards, those guards being the tell that it knew the columns were not its own. assignAreas() wrote ['section' => $id, 'subsection' => NULL] from a provider's candidate.
Saved bookings now go to the providers as they are, each reading its own fields; a provider answers with parts rather than ids and the engine carries one unopened. Both interface contracts lose the vocabulary too, including a @param that spelled area{section, subsection}, which is the engine publishing another module's shape as part of its own contract.
A guard in ModuleBoundariesTest asserts the engine names none of place, place_chosen, subsection or section, and was seen to fail against the old code naming all three real ones. One exception is named rather than hidden: LockAnchors::SCOPE_SECTION, whose subsumption rule sits in deadlock-critical code and belongs to a change of its own.
One regression, caught by the anchor scope test and worth recording. The placement's own scope provider takes the hold-area provider as a direct dependency and cast each answer with (int); with parts coming back instead of ids that cast produced 1, so a party too big for one block waited on one section rather than on both. Nothing found that call by grepping the interface name, because the service is wired to the concrete class.
Every figure in the hold cost log is identical before and after, all ten scenarios, compared one by one rather than merely green. Fifteen classes and 124 tests green locally on MySQL; the whole suite belongs to CI.
AI-Generated: Yes (Claude Code found both sites, wrote the fix, the guard and this summary. The guard was seen to fail before it passed and the cost figures were compared one by one.)
Issue fork yoyaku-3618663
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #3
mably commentedComment #4
mably commentedComment #6
mably commented