Child of #3618694: Take every submodule out of the engine's words, in code and in prose. The engine has always had the concept: a subdivision a request may be confined to, that carries its own count, and that holds serialize on. It called it an area, which is a word about space, and it reads that way: an engine that books a hotel night or a projector has no areas, and a reader who learns the word reaches for it again.

That is not idle. The comment directly above one of the reach-ins fixed in #3618663: Take the engine out of another module's schema, in the two places it reached in talked about "a picker that had the hall open", and the reach-in followed the words.

Revenue management calls this a sub-inventory: a pool counted on its own. Accurate, and clumsy in an identifier. The project's own docs already supplied the short form: "What partitions the seats is the part of the house they sit in". So: partition.

What is renamed

The engine, and everywhere the concept crosses the seam: the provider interface and its method, the line and request key, the two flags a retry and an assignment set, the service tag, the placement module's implementation of the seam, and LockAnchors::SCOPE_SECTION, which is now SCOPE_PARTITION.

Two words, two layers, one translation point

partition is the engine's word for something it carries and never opens. area stays the placement module's word and the booker's: the picker's option groups, the JavaScript, the HTTP claim body, the admin form, and every area test class name. SlotClaimController::wanted() is the single point that reads the wire's area and emits the engine's partition. Everything downstream of it speaks partition, everything upstream speaks area.

Three more contracts publishing another module's shape

#3618663: Take the engine out of another module's schema, in the two places it reached in took the engine out of another module's schema in two places and missed these. The hold interface, the request booker, the composer and the move value object all published array{section: int, subsection: int|null} in their own signatures, for a value the engine carries and never opens. They say mixed now, with the reason written where the shape used to be.

While the key was being renamed, two classes downstream of that translation point were still reading the old one, so a claim's partition arrived empty and every confinement was silently dropped: a party asking for one part of the house was seated anywhere, a part with no room left seated the party elsewhere instead of refusing, and the sentence naming the move was never said. phpstan reported no errors throughout, because a key that is never there is not a type error. One of the two also grouped its moves on a field inside the partition, reaching into a value it may not open. It groups on the serialized partition now, so the only question it asks of two of them is whether they are the same one.

Deliberately not in this change

SCOPE_PARTITION keeps the value it stores, "section". The string is a key in the anchor table, so changing it orphans the rows of a running site until they are recounted: that is a step of its own, with the recount planned rather than discovered. The four lists where the engine hardcodes another module's field names are untouched. And the theatre in the engine's prose is untouched: seat 171, hall 39, "the house" 32. Each is its own pass.

Two test defects the pipeline found

An area picker test clicked the panel through a handle it had already found, and a redraw landing between the two round trips left it clicking a node that had left the document: the failure the trait's own value assertion was written about. It has a click twin now. And a booking page test passed a render array straight into a method that takes it by reference, for two PHP notices.

Verification

The full pipeline is green on both the current and the next major lane, kernel and functional, with the next major composer job played. Every figure in the hold cost log is identical, compared one by one: renaming moves no statement. phpstan at level 3 reports no errors, phpcs and cspell clean.

AI-Generated: Yes (Claude Code performed the rename and wrote this summary. The word is taken from revenue management practice and from the project's own docs rather than invented, after the maintainer twice corrected the method for choosing it. The reader that the rename left on the far side of the seam was found by the project's own tests, not by review.)

Issue fork yoyaku-3618720

Command icon 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

mably created an issue. See original summary.

mably’s picture

Status: Active » Needs review

  • mably committed adb1e188 on 1.x
    task: #3618720 Call a part of a resource a part, in the engine and...
mably’s picture

Status: Needs review » Fixed

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

mably’s picture

Title: Call a part of a resource a part, in the engine and across the seam » Call a partition of a resource a partition, in the engine and across the seam
Issue summary: View changes

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.