Skip to content

fix(dashboard): improve high-density chore dashboard support#129

Merged
ccpk1 merged 11 commits into
mainfrom
ccpk1/issue124
May 9, 2026
Merged

fix(dashboard): improve high-density chore dashboard support#129
ccpk1 merged 11 commits into
mainfrom
ccpk1/issue124

Conversation

@ccpk1
Copy link
Copy Markdown
Owner

@ccpk1 ccpk1 commented May 9, 2026

Summary

Closes #124

This PR delivers the Issue 124 architecture update for users with very high numbers of chores assigned to a single user.

The ChoreOps backend and data model were already sound. The real limitation showed up in how large chore lists were surfaced through Home Assistant helpers, sensors, templates, and dashboards. At around 135 chores per user, the old approach was pushing too much dashboard data through one helper surface, which created practical limits in payload size and frontend rendering.

To address that, this PR redesigns the dashboard data path so large chore lists can be split across multiple helper-backed chore lists when needed. In this PR, sharding means splitting a large chore list into ordered companion helper lists instead of forcing everything through one oversized helper.

Why this was needed

What makes ChoreOps different is that it intentionally exposes rich, meaningful state directly into Home Assistant rather than hiding everything behind a private backend database, proprietary cards, or an opaque application layer.

That design is a strength because it keeps the system open, visible, and flexible for users who want to build their own automations, dashboards, and workflows on top of Home Assistant. The tradeoff is that we also have to work within real Home Assistant limits around entity payload size, helper attributes, template evaluation, and frontend rendering.

This change was needed because the data model itself was not failing, but the old single-helper dashboard surface was no longer the right way to present that much chore data at very high per-user counts.

What changed

  • Added a new runtime dashboard-helper architecture for high chore counts per user.
  • Kept the main dashboard helper as the primary entry point, but allowed it to point to additional chore-list helpers when the payload grows too large.
  • Updated the integration to manage those helper lists at runtime, including setup, reload, cleanup, and threshold-based transitions.
  • Updated the maintained dashboard templates so they merge those chore lists once per card and continue rendering from one local in-memory list.
  • Removed the old backend chores_by_label transport and rebuilt label grouping from chore rows in shared dashboard logic.
  • Synced the latest canonical dashboard assets into the vendored integration runtime mirror.
  • Added dense-scenario test coverage up through 120 chores per assignee, along with lifecycle, reload, registry, diagnostics, and admin dashboard coverage.

User impact

  • Users with very large chore counts assigned to one user should see more reliable dashboard behavior.
  • The primary maintained dashboards now support the new high-density data flow.
  • ChoreOps keeps its open design, where rich state is still surfaced into Home Assistant rather than hidden away behind a private backend.
  • Very large dashboards may still feel slow if the browser is asked to render 100+ complex rows at once.

Performance note

Even with the new architecture, very large dashboards can still feel sluggish when rendering long lists of complex custom-card rows. That is a frontend rendering constraint, not a backend correctness problem.

At larger scales, performance is better when views are broken into smaller targeted chore groups or when simpler cards are used for some workflows.

ccpk1 and others added 11 commits April 12, 2026 15:20
…ning

Implement the completed CHORE_DYNAMIC_ENTITY_LIFECYCLE plan for beta validation.

- add a chore-scoped runtime sync contract with explicit mutation context
- create and remove live chore sensors and workflow buttons without full entry reload
- route service and options-flow chore CRUD through the shared runtime sync path
- preserve omitted optional values in sparse chore edits while keeping explicit overwrite and clear behavior intact
- expand regression coverage for runtime entity lifecycle, helper flows, and sanctioned reload boundaries
- update README, test guidance, and archive the completed initiative documents

Keep sanctioned system-settings reload behavior intact for non-chore paths.

Validation:
- ./utils/quick_lint.sh --fix
- targeted pytest runtime-sync/options-flow suite: 100 passed

Refs: #107
Plan: CHORE_DYNAMIC_ENTITY_LIFECYCLE_COMPLETED
What changed:
- Added a dense scenario generator and committed 40-100 chores-per-user fixtures
- Added opt-in stress tests for dashboard helper size and a representative claim flow
- Updated scenario/testing docs to cover dense stress runs and live HA manual loading
- Confirmed the current helper-size boundary is between 40 and 50 chores per assignee for the generated dense profile

Why:
- Reproduce issue #124 with the existing scenario framework instead of ad hoc setups
- Establish a repeatable way to measure dashboard helper growth as chore density increases
- Give us a stable baseline for future payload-reduction work in the dashboard helper sensors
Includes runtime chore shard helpers, shared dashboard snippet migration, dense scenario expansion through 120 chores per assignee, and focused shard validation/documentation updates.

Known follow-up: tests/test_dashboard_helper_sharding.py currently still has two failing lifecycle cases covering reload reconstruction and small-edit shard-pointer publication on the main helper.
…nd accepted in importing systems

Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <copilot@github.com>
@ccpk1 ccpk1 self-assigned this May 9, 2026
@ccpk1 ccpk1 merged commit 139f226 into main May 9, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ISSUE] state attibutes exceed maximum size

1 participant