The engine books a quantity of a resource for a time. What that quantity is divided into, and what one of it is called, belongs to whichever module says so. #3618694: Take every submodule out of the engine's words, in code and in prose took most of another module's words out of it; this takes the rest, and the last of them was not prose but a table.
A form-layout table in the engine
ResourceFieldGroups held forty-odd field names and the form section each belongs in, six of them placement's: venue, configuration, seating_strategy, area_choice, party_area and pinning. So the engine's own source knew what a venue was, and a module adding a field had to send a patch to the engine to have it grouped.
Two screens read that table, the resource form and the field rule maker on each level, and one table is what stopped them drifting apart. So it is not deleted, it is asked for: hook_yoyaku_resource_field_group_info() lets each module name its sections and the fields it puts in them, beside the code declaring those fields, and ResourceFieldGroups collects the answers once for both screens. Naming a group somebody else declared adds fields to it without restating its title, which is how payment puts refund inside the engine's cancellation section. A group nobody titled is dropped rather than rendered blank.
A seam named after one of its two implementations
PlacementProviderInterface decides what each unit of an individual booking gets. It is the engine's own extension point and the engine ships one of its two implementations, so it stays; what goes is the word. It becomes UnitAssignmentProviderInterface, with UnitAssignment, UnitAssignmentMove, assign() and the tag yoyaku.unit_assignment_provider.
AnonymousPlacementProvider becomes DefaultUnitAssignmentProvider. Core names 55 classes Default* for the standard implementation of a seam, and reserves Anonymous for a visitor who is not logged in, which is also what this project means by it everywhere else.
A stored value that outlived its reason
LockAnchors::SCOPE_PARTITION stored section. The name moved in #3618720: Call a partition of a resource a partition, in the engine and across the seam and the value deliberately did not, so that the rows a running site waited on went on being those rows. It now stores partition: the value is written and read only through the constant, no literal spelling of it exists anywhere, and no other scope starts with that prefix, which the subsumption rule needs.
The prose
Roughly 280 comment lines explained the engine in another module's vocabulary. Where a word named a thing it is now a unit or a partition; where it was ordinary English it is left alone. Nineteen strings an operator reads said "places" where the number is units, and the French moves with them.
Three sites keep another module's words on purpose and say why: the illustration naming a hall, a hire desk and an office in one breath, which is the clearest statement of this rule in the tree; the booking unit plugin, whose point is that Places sits beside Nights and Units as a label a site picks; and Pinning as an English verb about a langcode.
Every method named the way core names it
The rule the field groups answer to applies to the names themselves, so this branch also carries a naming pass over the whole project, measured rather than judged: every method name in core, in the contributed modules this site runs and in vendor was indexed, and a name changed only where core's own corpus disagreed with it. Private, protected and static methods are included, with no helper exemption, because the reader of a private method is owed the same clarity as the caller of a public one.
The largest single rename is PolicyFact to PolicyRequirement, with the resolvers that build one. A fact is something checked for truth; what these carry is a condition a policy requires before it applies, which is what core calls a requirement in 59 classes. Alongside it: British spellings corrected, local variables put in snake_case while class properties stay camelCase as core has them, and boolean methods given the is, has or should prefix core uses.
Unique keys that had stopped being created
Renaming TableKeysTrait::uniqueKeys() to getUniqueKeys() left five storage schema subclasses declaring the old name. Nothing errored: they simply stopped overriding, the trait's empty default answered, and the database unique keys were no longer created, so duplicate allotment, slot, slot tariff and preset allotment rows became legal. Seven tests asserting an EntityStorageException are what caught it. A renamed override does not break loudly, it goes quiet.
Following kessai and orchestra
Both dependencies ran the same core-naming pass while this branch was open, moving seams yoyaku implements and calls: two in kessai (getTokenPaymentsQuery() and getCheckoutToken()) and sixteen in orchestra, among them the payable resolver's resolveOutcome(), getVariables() on the variable providers, and getStepUrl(). Every signature is unchanged. The five that were overrides would have gone silently wrong rather than fataled, for the reason above.
What this does not do
The grade field stays where it is. SingleTariffPerCell is a rule about tariffs and bands, both of which the engine prices, so it stays in the engine; what is misplaced is the field, whose entity belongs to a module only because it carries a venue reference. The boundary guard keeps naming grade as its one honest exception until that moves.
Upgrading
An anchor row written under the old scope key is not found by the new one. Nothing breaks loudly: the hold logs the missing anchor, writes it and carries on, and the counter starts empty so the first reader recounts. But that repair is taken under load, once per partition per slot, which is the one thing the table exists to prevent. So a site carrying anchors from before this change reinstalls, which is the declared upgrade path before 1.0.
AI-Generated: Yes (Claude Code did the sweep and drafted this issue. I reviewed it before posting.)
Issue fork yoyaku-3619143
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 #5
mably commentedComment #7
mably commented