W-038: ecs-prefab prefab entities and query exclusion (PREFAB-F01)¶
Type: feature · Size: S · Epic: E-prefab-v0 · Target: packages/ecs-prefab · Breaking: no Depends: W-012 Refs: spec PREFAB-001..PREFAB-008
Goal¶
Add the Prefab tag and createPrefab(world, traits?) with IsExcluded added first, so that prefabs never match koota queries, Not, tracking queries, or onQueryAdd. The isA option comes with the variants item (W-041). Prefabs stay regular entities.
Steps¶
- S1 (PREFAB-001, PREFAB-002):
createPrefabspawnsIsExcluded, thenPrefab, then the given traits, merging[Trait, params]over schema defaults;has(Prefab)istrueonly for prefabs; files: packages/ecs-prefab/src/prefab.ts, packages/ecs-prefab/src/create-prefab.ts, packages/ecs-prefab/src/index.ts, packages/ecs-prefab/tests/create-prefab.test.ts - S2 (PREFAB-003, PREFAB-004, PREFAB-005): prefabs are not returned by
world.query,Not,onQueryAdd, orAdded, and instances still are; theIsA('*')part of PREFAB-004 is tested in W-041; files: packages/ecs-prefab/tests/query-exclusion.test.ts - S3 (PREFAB-006, PREFAB-007, PREFAB-008; changeset): prefab supports
get,set,add,remove,has, anddestroywith koota semantics; canary test thatworld.onAddfires for a prefab; README states the observer and enumeration consequences; files: packages/ecs-prefab/tests/prefab-entity.test.ts, packages/ecs-prefab/README.md, .changeset/w-038-ecs-prefab-entities.md (patch,@workspace/ecs-prefab)
Log¶
- 2026-11-01 created from the approved spec split of W-005 (Triage)
- 2026-11-01 state Later -> Next (Triage, user-confirmed after board review)
- 2026-11-02 moved up in Next: the M1 demo path (prefab for demo-dnd) comes first (Triage)
- 2026-11-02 Next -> Now, state active (Triage, user-requested)
- 2026-11-02 S1-S3 review passed (Reviewer final pass APPROVED; no [manual] requirements, no accept gate) (Triage)
- 2026-11-02 Now -> Done (Triage)