Files
2026-05-27 23:29:53 +01:00

65 lines
2.6 KiB
Markdown

# Tasks: enterprise-gaming-ecs
## Phase 1 — Scaffold
- [ ] Create `gaming/engine/ecs/` with `package.json` (`@suaveplan/ecs`, version `0.1.0`, `sideEffects: false`)
- [ ] Add `tsconfig.json` extending `@suaveplan/typescript-config/library.json`
- [ ] Add `vitest.config.ts` using `createTestConfig()`
- [ ] Wire `bunx turbo lint typecheck test` in turbo pipeline
## Phase 2 — Error codes & constants
- [ ] Implement `src/error-codes.ts` — `EcsError extends SuaveplanError`, `defineCodes` for `ECS.*` codes
- [ ] Implement `src/constants/index.ts` — `DEFAULT_MAX_ENTITIES`, `ROOT_ARCHETYPE_MASK`
## Phase 3 — Types
- [ ] Implement `src/types/common.ts` — `Entity`, `ComponentType`, `ComponentDescriptor<T>`, `QueryMask`, `QueryResult`, `System`, `WorldOptions`, `Archetype`
- [ ] Write `src/types/common.md`
## Phase 4 — Component registry
- [ ] Implement `src/core/component/component.ts` — `defineComponent<T>()`, auto-incrementing type IDs
- [ ] Write tests and docs
## Phase 5 — Archetype store
- [ ] Implement `src/core/archetype/archetype.ts` — `bigint` mask, entity roster, typed array storage for numeric components
- [ ] Write tests and docs
## Phase 6 — Query engine
- [ ] Implement `src/core/query/query.ts` — `buildQueryMask()`, `matchArchetype()`, `QueryResult` with `forEach`
- [ ] Property-based test: query result = exhaustive entity scan filtered by component membership
## Phase 7 — System registry
- [ ] Implement `src/core/system/system.ts` — `SystemRegistry` with ordered update loop, `registerSystem`, `unregisterSystem`
- [ ] Write tests and docs
## Phase 8 — World
- [ ] Implement `src/core/world/world.ts` — `createWorld()`, spawn/despawn, component add/remove, tick with AbortSignal, OTel spans
- [ ] Wire `@suaveplan/events` entity lifecycle events
- [ ] Write tests and docs
## Phase 9 — Utils
- [ ] Implement `src/utils/bitset.ts` — `maskFromTypes()`, `maskHasAll()`, `maskHasNone()`, `maskHasAny()`
- [ ] Write tests
## Phase 10 — Integration & property tests
- [ ] `tests/integration.test.ts` — full ECS loop: spawn entities, add components, query, system update, despawn
- [ ] `tests/property.test.ts` — fast-check: entity count monotonicity, archetype mask algebra, query consistency
## Phase 11 — Benchmark
- [ ] `src/__benchmarks__/ecs.bench.ts` — 10k spawn, 100k query iteration, 60fps tick with 10 systems
## Phase 12 — Pre-publish gate
- [ ] `bunx turbo lint typecheck test --filter=@suaveplan/ecs` green
- [ ] `bunx turbo test:coverage --filter=@suaveplan/ecs` — 100% on all touched modules
- [ ] Publish: `bun scripts/publish.ts --package @suaveplan/ecs`