Document relevance of ordering of operations in `Component::preSave` to prevent future bugs
### Overview `Component::preSave()` runs a sequence of self-healing config updaters (`CanvasConfigUpdater` methods). Their relative order is significant, but nothing documents it: - A heal that changes versioned settings creates a new active version (e.g. the `required`-flag heal), which changes what "the active version" is for every heal that runs after it. - A heal that derives data from the live implementation (e.g. the `derived_schema_metadata` backfill from #3591727) therefore produces different per-version outcomes depending on whether it runs before or after a version-creating heal: run first, the data lands on the soon-to-be-past version and is copied into the new one; run last, the past version is left without it. The same applies to *when* a heal runs relative to other write paths: the outcome can differ between auto-save operating on a component and `hook_post_update_N()` healing it, because each triggers the chain at a different moment. In !1300 the position of a new heal was chosen ad hoc, and the rationale for the existing order lives only in reviewers' heads — see the discussion at https://git.drupalcode.org/project/canvas/-/merge_requests/1300#note_1427697. Every future heal author faces the same undocumented decision. ### Proposed resolution Document the ordering contract on `Component::preSave()` (or the `ComponentPreSaveUpdate` attribute), rather than each individual heal: - Which heals create new versions and which mutate in place, and why that distinction determines what a later heal observes. - The default rule for new heals (append at the end) and what must be checked before deliberately inserting one earlier. Documentation only; no behavior change. ### User interface changes None.
issue