Skip to content

fix(ecs): synchronize inherited styles and design variable bindings - #391

Merged
xiaoiver merged 1 commit into
masterfrom
codex/ecs-property-inheritance-coverage
Oct 9, 2026
Merged

xiaoiver merged 1 commit into
masterfrom
codex/ecs-property-inheritance-coverage

Conversation

@xiaoiver

@xiaoiver xiaoiver commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Changing a group's paint, moving a subtree, or switching a bound theme could leave descendants rendering their previous styles. Clearing a child's override also disagreed with a fresh document load. Resolve inherited presentation at the API update boundary against the completed scene, including unchanged descendants, while retaining authored overrides and keeping inherited values out of child documents/history.

Text design variables now resolve consistently on load and update. Removing numeric definitions restores component defaults instead of retaining stale measurements or writing NaN. This also restores rough fills during ECS geometry rebuilds, which were still passing the removed legacy fill field.

  • Add 64 Jest regressions for group inheritance, batched/remote updates, reparenting, history, icon/rough children, text bindings, theme precedence, type conversion and export ownership.
  • Batch descendant style refreshes for design-variable updates and avoid computing inheritance for unrelated geometry edits.
  • Keep freshly deserialized entities on the initialization path, avoiding additional startup component permissions; new children see the final values of parents edited in the same batch.
  • Add Chromium and WebKit pixel coverage for inherited regular/rough fills, libtess path fill-rule holes, theme switching, overrides and undo/redo.
  • Add design-variable and inheritance coverage gates; keep the full ECS source scope and existing gates.
  • Update the coverage progress document and add an ECS patch changeset. No package publication.

Validation:

  • Full native ECS coverage run: 211 suites / 1523 tests in 576.805s; 210 suites / 1521 tests passed. Two existing api.batch isolation cases failed because their fake entities did not implement ECS writes. Updated that suite's component-write mock and reran all 3 cases successfully, without changing production code. All 64 new tests passed in the full run.
  • Full-run ECS coverage: lines 69.53% → 69.92% (19,793 / 28,308; +122 covered lines), branches 57.20% → 57.87%, functions 70.25% → 70.76%. Design-variable lines 70.53% → 96.32%, functions 100%. All existing/new coverage gates satisfied; the focused rerun does not replace this full-run report.
  • Chromium and iPhone WebKit: new pixel regression passed in both engines, including libtess path holes after inherited fill-rule changes.
  • Repository lint, final changed-file lint, focused TypeScript checking (including production dependencies/browser fixture), formatting and diff checks passed.

Next coverage batch remains rough-shape parameters and 3D geometry/material/light property synchronization.

@xiaoiver
xiaoiver merged commit b1c7e67 into master Oct 9, 2026
12 of 18 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.

1 participant