Migrate Hierarchical Taxonomy - 2.0.x
====================================

Supported dependencies
----------------------
Drupal ^10.6 || ^11.4; PHP >=8.2 (Drupal 11 itself requires >=8.3).
Migrate Plus ^6.0.6; core Migrate and Taxonomy.

6.0.0 already has the typed lookup properties and array entity() contract,
and the regression tests pass against it, but its implicit nullable migration
parameters emit PHP 8.4 deprecations. 6.0.6 is the first inspected release after
6.0.5 with the modern explicit nullable signatures and requires PHP 8.2.
Tests cover 6.0.6 and 6.0.10. No compatibility shim for Migrate Plus 5 remains.

Drupal 12 is deliberately NOT declared: the current Migrate Plus 6.0.10
requires Drupal ^10.5 || ^11. Our overridden contracts and process attribute
have been modernized, but D12 installation/runtime remains externally blocked.
Do not bypass dependencies with --ignore-platform-reqs.

Behavior and breaking changes
-----------------------------
The public process ID hierarchical_taxonomy and migration configuration remain
unchanged. Lookup remains limited to immediate children of the current parent
in the configured vocabulary. Missing terms are saved using EntityGenerate.
Each row starts at root parent 0. Empty levels are skipped, including historical
PHP-empty '0'; all-empty input returns FALSE. Leading/trailing spaces are trimmed.
The last matching sibling wins for existing duplicates. Matching remains case
sensitive, even when ignore_case is configured, as in the historical module.
Stub rows follow the same creation/lookup path and retain their stub flag.
The historical plugin does not apply EntityGenerate values/default_values;
this release preserves that behavior rather than changing migration output.

Breaking: Drupal 8/9, Drupal <10.6, Migrate Plus 5 and PHP <8.2 are no longer
supported. Subclasses must match create(..., ?MigrationInterface = NULL): self
and entity($value): array. Redundant inherited property declarations and the
entityManager alias are removed. Use the inherited entityTypeManager instead.
The plugin uses #[MigrateProcess]; help lives in a Hook class. A LegacyHook
wrapper delegates on Drupal 10, which does not dispatch object-oriented hooks.

Verification
------------
tests/src/Unit/HierarchicalTaxonomyTest.php covers actual parent factory and
entity generation, roots/children, duplicate names, vocabulary boundaries,
empty levels, stubs, reuse and plugin metadata with mocked entity storage.
Run with a Drupal/core-dev PHPUnit setup and this module's dependencies:
  vendor/bin/phpunit -c core/phpunit.xml.dist modules/contrib/migrate_hierarchical_taxonomy/tests
No database migration was run. Rebuild caches after deployment and rehearse
representative migrations on a copy of the site database before production.

References
----------
https://www.drupal.org/project/migrate_plus/releases/6.0.6
https://www.drupal.org/project/migrate_plus/releases/6.0.10
