Files
Tony C e40521bd1c Rebalance EntityGroupType + hide delegates from edit sidebar (#367) (#369)
* Rebalance EntityGroupType buckets and close 18-type coverage gap (#367)

The prior bucket layout silently routed 15% of EntityTypes (FREEZER,
GARAGE_DOOR, LEAK_SENSOR, all pool types, etc.) through the OTHER
fallback because they had no explicit assignment, and conflated
heterogeneous types in OUTDOORS/UTILITIES/LIGHTS_SWITCHES. New layout
is 15 buckets organized by how a homeowner partitions their LocationView:
AUTOMATION (controllable end-points), SECURITY, SENSORS (new),
APPLIANCES (now subsumes HVAC), POOL (new), GENERAL (new — catchall
distinct from the silent OTHER fallback), and friends. Every EntityType
now has an explicit bucket assignment, pinned by a new invariant test.

* Hide delegate entities from edit-mode sidebar entity list (#367)

Placing a principal entity in a LocationView or Collection automatically
pulls its delegates along, and unplacing the principal removes them.
Showing the delegates as separately-toggleable rows in the same edit
sidebar invited confusing partial states (an Area added without its
proxy sensor, etc.).

EntityManager.create_location_entity_view_group_list and
CollectionManager.create_entity_collection_group_list now accept an
exclude_delegates kwarg; the two manage-items sidebars opt in. The
entity-pairing modal keeps the default and continues to surface
delegates so the relationship can be broken there.

* Refine EntityGroupType: drop OTHER, fold EntityType.OTHER into GENERAL (#367)

Three follow-up adjustments to the rebalance:
  - AREA moves from GENERAL to STRUCTURAL — areas are spatial
    regions of the home, structural by nature.
  - PUMP, MOTOR, SUMP_PUMP move from GENERAL to ELECTRICAL —
    they're electrically driven and don't fit a domain bucket.
  - EntityGroupType.OTHER is removed; EntityType.OTHER lives
    in GENERAL alongside AUTOMOBILE and CONSUMABLE. There's no
    longer a separate silent-fallback bucket — GENERAL is the
    explicit catchall, and the full-coverage invariant test
    ensures every EntityType has an assignment.
2026-05-26 07:43:52 -05:00
..