@forgeax/engine-ecs 0.1.33 → 0.1.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +35 -18
  2. package/dist/__tests__/query-idle.unit.test.d.ts +2 -0
  3. package/dist/__tests__/query-idle.unit.test.d.ts.map +1 -0
  4. package/dist/__tests__/set-allocation.unit.test.d.ts +2 -0
  5. package/dist/__tests__/set-allocation.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/state-projection.unit.test.d.ts +2 -0
  7. package/dist/__tests__/state-projection.unit.test.d.ts.map +1 -0
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.mjs +579 -623
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/projection/index.d.ts +2 -18
  13. package/dist/projection/index.d.ts.map +1 -1
  14. package/dist/projection/index.mjs +433 -23
  15. package/dist/projection/index.mjs.map +1 -1
  16. package/dist/projection/state-projection.d.ts +37 -0
  17. package/dist/projection/state-projection.d.ts.map +1 -0
  18. package/dist/query/query.d.ts.map +1 -1
  19. package/dist/shared-ref-store.d.ts +0 -24
  20. package/dist/shared-ref-store.d.ts.map +1 -1
  21. package/dist/shared.mjs.map +1 -1
  22. package/dist/storage/archetype-graph.d.ts +2 -0
  23. package/dist/storage/archetype-graph.d.ts.map +1 -1
  24. package/dist/storage/change-detection.d.ts +4 -0
  25. package/dist/storage/change-detection.d.ts.map +1 -1
  26. package/dist/storage/table.d.ts +6 -3
  27. package/dist/storage/table.d.ts.map +1 -1
  28. package/dist/world-internal.d.ts +0 -2
  29. package/dist/world-internal.d.ts.map +1 -1
  30. package/dist/world.d.ts +0 -2
  31. package/dist/world.d.ts.map +1 -1
  32. package/package.json +4 -4
  33. package/src/__tests__/component-version-surface.test.ts +1 -7
  34. package/src/__tests__/derived-range-writer.contract.test.ts +6 -0
  35. package/src/__tests__/ecs-core-reduction.characterization.test.ts +2 -3
  36. package/src/__tests__/execution-conflict-boundary.unit.test.ts +4 -0
  37. package/src/__tests__/externalization-render-read-lease.unit.test.ts +4 -10
  38. package/src/__tests__/query-idle.unit.test.ts +19 -0
  39. package/src/__tests__/set-allocation.unit.test.ts +30 -0
  40. package/src/__tests__/shared-ref-lifetime.unit.test.ts +1 -2
  41. package/src/__tests__/shared-ref-store.unit.test.ts +2 -34
  42. package/src/__tests__/state-projection.unit.test.ts +159 -0
  43. package/src/__tests__/world-health.contract.test.ts +0 -23
  44. package/src/index.ts +1 -1
  45. package/src/projection/index.ts +9 -39
  46. package/src/projection/state-projection.ts +250 -0
  47. package/src/query/query.ts +23 -16
  48. package/src/shared-ref-store.ts +0 -70
  49. package/src/storage/archetype-graph.ts +15 -1
  50. package/src/storage/change-detection.ts +36 -4
  51. package/src/storage/table.ts +20 -1
  52. package/src/world-internal.ts +0 -2
  53. package/src/world.ts +35 -38
  54. package/dist/__tests__/structural-evidence.contract.test-d.d.ts +0 -2
  55. package/dist/__tests__/structural-evidence.contract.test-d.d.ts.map +0 -1
  56. package/dist/__tests__/structural-evidence.contract.test.d.ts +0 -2
  57. package/dist/__tests__/structural-evidence.contract.test.d.ts.map +0 -1
  58. package/dist/storage/structural-evidence.d.ts +0 -30
  59. package/dist/storage/structural-evidence.d.ts.map +0 -1
  60. package/src/__tests__/structural-evidence.contract.test-d.ts +0 -6
  61. package/src/__tests__/structural-evidence.contract.test.ts +0 -49
  62. package/src/storage/structural-evidence.ts +0 -64
@@ -1 +1 @@
1
- {"version":3,"file":"archetype-graph.d.ts","sourceRoot":"","sources":["../../src/storage/archetype-graph.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAiC,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAoC,KAAK,KAAK,EAAE,KAAK,OAAO,EAAY,MAAM,SAAS,CAAC;AAE/F;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,+DAA+D;IAC/D,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,UAAQ,GAAG,cAAc,CAWnE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,CAIlE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GACnC,KAAK,CAYP;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAMjG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,EACxC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GACnC,SAAS,CAgBX;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,GACnB,SAAS,CAeX;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,GACvB,SAAS,CAkBX"}
1
+ {"version":3,"file":"archetype-graph.d.ts","sourceRoot":"","sources":["../../src/storage/archetype-graph.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAiC,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAoC,KAAK,KAAK,EAAE,KAAK,OAAO,EAAY,MAAM,SAAS,CAAC;AAE/F;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,+DAA+D;IAC/D,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,uBAAuB,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,UAAQ,GAAG,cAAc,CAanE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,CAIlE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GACnC,KAAK,CAsBP;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAMjG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,EACxC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GACnC,SAAS,CAgBX;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,GACnB,SAAS,CAeX;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,GACvB,SAAS,CAkBX"}
@@ -1,9 +1,11 @@
1
1
  import type { Component } from '../component';
2
2
  import { type EntityHandle } from '../entity-handle';
3
3
  import type { ArchetypeGraph } from './archetype-graph';
4
+ export declare const PROJECTION_BLOCK_SIZE = 256;
4
5
  export interface ComponentEpochColumns {
5
6
  added: Float64Array;
6
7
  changed: Float64Array;
8
+ blocks: Float64Array;
7
9
  }
8
10
  export declare function createComponentEpochColumns(capacity: number): ComponentEpochColumns;
9
11
  export declare function growComponentEpochColumns(columns: ComponentEpochColumns, capacity: number): ComponentEpochColumns;
@@ -34,5 +36,7 @@ interface EntityLocation {
34
36
  export declare function readComponentChange(graph: ArchetypeGraph, location: EntityLocation, entity: EntityHandle, componentId: number): ChangeTicks | undefined;
35
37
  export declare function markComponentsAdded(graph: ArchetypeGraph, location: EntityLocation, entity: EntityHandle, componentIds: readonly number[], epoch: number): void;
36
38
  export declare function markComponentChanged(graph: ArchetypeGraph, location: EntityLocation, entity: EntityHandle, componentId: number, epoch: () => number): void;
39
+ /** Row evidence and its conservative block summary share the World epoch. */
40
+ export declare function publishComponentRange(columns: ComponentEpochColumns, start: number, count: number, epoch: number): void;
37
41
  export {};
38
42
  //# sourceMappingURL=change-detection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-detection.d.ts","sourceRoot":"","sources":["../../src/storage/change-detection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAEnF;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,MAAM,GACf,qBAAqB,CAMvB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,GAChB,IAAI,CAGN;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,CAWrE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAG9E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAE7E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAe9F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAchF;AA0BD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAE3D;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,WAAW,GAAG,SAAS,CAmBzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,KAAK,EAAE,MAAM,GACZ,IAAI,CAiBN;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,MAAM,GAClB,IAAI,CAaN"}
1
+ {"version":3,"file":"change-detection.d.ts","sourceRoot":"","sources":["../../src/storage/change-detection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAIzC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAMnF;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,MAAM,GACf,qBAAqB,CAQvB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,GAChB,IAAI,CAKN;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,CAWrE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAG9E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAE7E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAe9F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAchF;AA0BD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAE3D;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,WAAW,GAAG,SAAS,CAmBzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,KAAK,EAAE,MAAM,GACZ,IAAI,CAiBN;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,MAAM,GAClB,IAAI,CAaN;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,IAAI,CAaN"}
@@ -16,14 +16,17 @@ export interface Table {
16
16
  size: number;
17
17
  capacity: number;
18
18
  version: number;
19
+ membership: Float64Array;
20
+ readonly activeDirectories: readonly Set<Table>[];
19
21
  }
20
22
  export declare function tableKey(componentIds: ReadonlyArray<ComponentId>): string;
21
23
  export declare function canonicalComponents(components: ReadonlyArray<Component>): Component[];
22
- export declare function createTable(components: ReadonlyArray<Component>, id: TableId, shared?: boolean): Table;
23
- export declare function appendTableRow(table: Table, entity: EntityHandle): number;
24
- export declare function removeTableRow(table: Table, row: number): {
24
+ export declare function createTable(components: ReadonlyArray<Component>, id: TableId, shared?: boolean, activeDirectories?: readonly Set<Table>[]): Table;
25
+ export declare function appendTableRow(table: Table, entity: EntityHandle, epoch?: number): number;
26
+ export declare function removeTableRow(table: Table, row: number, epoch?: number): {
25
27
  movedEntity: EntityHandle;
26
28
  newRow: number;
27
29
  } | null;
28
30
  export declare function growTable(table: Table, targetCapacity: number): void;
31
+ export declare function markTableMembership(table: Table, row: number, epoch: number): void;
29
32
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/storage/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EAQjB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAwB,KAAK,MAAM,EAA4B,MAAM,UAAU,CAAC;AAIvF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,CAEzE;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAKrF;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,EAAE,EAAE,OAAO,EACX,MAAM,UAAQ,GACb,KAAK,CAgDP;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAOzE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,GACV;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiBtD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAcpE"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/storage/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EAQjB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,KAAK,qBAAqB,EAK3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAwB,KAAK,MAAM,EAA4B,MAAM,UAAU,CAAC;AAIvF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,YAAY,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;CACnD;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,CAEzE;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAKrF;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,EAAE,EAAE,OAAO,EACX,MAAM,UAAQ,EACd,iBAAiB,GAAE,SAAS,GAAG,CAAC,KAAK,CAAC,EAAuB,GAC5D,KAAK,CAkDP;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,SAAI,GAAG,MAAM,CASpF;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,SAAI,GACR;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBtD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAiBpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAElF"}
@@ -17,7 +17,6 @@ import type { SharedRefStore } from './shared-ref-store';
17
17
  import type { Archetype } from './storage/archetype';
18
18
  import type { ArchetypeGraph } from './storage/archetype-graph';
19
19
  import type { ChangeTicks } from './storage/change-detection';
20
- import type { StructuralEvidenceRing } from './storage/structural-evidence';
21
20
  import type { Table } from './storage/table';
22
21
  import type { ClockWriter } from './time';
23
22
  import type { ComponentData, EcsError, EntityRecord } from './world';
@@ -52,7 +51,6 @@ export interface WorldInternal {
52
51
  readonly getSchedules: () => ReadonlyMap<ScheduleToken, Schedule>;
53
52
  readonly getSharedRefs: () => SharedRefStore;
54
53
  readonly getStructureEpoch: () => number;
55
- readonly getStructuralEvidence: () => StructuralEvidenceRing;
56
54
  readonly lookupAlive: (entity: EntityHandle, operation: string, component?: string) => Result<EntityRecord, EcsError>;
57
55
  readonly markComponentChanged: (entity: EntityHandle, componentId: number) => void;
58
56
  readonly markComponentRangeChanged: (table: Table, componentId: number, rowStart: number, rowCount: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"world-internal.d.ts","sourceRoot":"","sources":["../src/world-internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"world-internal.d.ts","sourceRoot":"","sources":["../src/world-internal.ts"],"names":[],"mappings":"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"}
package/dist/world.d.ts CHANGED
@@ -172,7 +172,6 @@ export declare class World {
172
172
  /** Per-World shared-ref store; public read-only for direct handle operations. */
173
173
  readonly sharedRefs: SharedRefStore;
174
174
  private readonly componentMutationEpochs;
175
- private readonly structuralEvidence;
176
175
  /** One packed reverse index per relationship source component. */
177
176
  private readonly relationshipIndexes;
178
177
  private mutationEpoch;
@@ -204,7 +203,6 @@ export declare class World {
204
203
  private poisonedResult;
205
204
  query<const R extends readonly Component[] = readonly [], const W extends readonly Component[] = readonly [], const O extends readonly Component[] = readonly []>(descriptor: QueryDescriptor<R, W, O>): Result<Query<R, W, O>, QueryCreationError>;
206
205
  private componentIsInUse;
207
- private recordStructuralEvidence;
208
206
  /** Resolve current logical identity for a packed entity handle. */
209
207
  private internalgetEntityArchetype;
210
208
  /** Component change state for query filters. */
@@ -1 +1 @@
1
- {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/engine-ecs",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -42,9 +42,9 @@
42
42
  "LICENSE"
43
43
  ],
44
44
  "dependencies": {
45
- "@forgeax/engine-math": "0.1.33",
46
- "@forgeax/engine-plugin": "0.1.33",
47
- "@forgeax/engine-types": "0.1.33"
45
+ "@forgeax/engine-math": "0.1.34",
46
+ "@forgeax/engine-plugin": "0.1.34",
47
+ "@forgeax/engine-types": "0.1.34"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/node": "^20.14.0"
@@ -1,6 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
2
  import { defineComponent } from '../component';
3
- import { readStructuralEvidence } from '../projection';
4
3
  import type { Query } from '../query/query';
5
4
  import { World } from '../world';
6
5
 
@@ -13,7 +12,7 @@ function changedEntities(query: Query): number[] {
13
12
  }
14
13
 
15
14
  describe('component version surface', () => {
16
- it('keeps value versions and typed structural evidence separate', () => {
15
+ it('keeps value observation independent of structure versions', () => {
17
16
  const world = new World();
18
17
  const query = world.query({ changed: [Value] }).unwrap();
19
18
  const entity = world.spawn({ component: Value, data: { value: 1 } }).unwrap();
@@ -22,11 +21,6 @@ describe('component version surface', () => {
22
21
  world.set(entity, Value, { value: 2 }).unwrap();
23
22
  expect(changedEntities(query)).toEqual([entity]);
24
23
  expect(changedEntities(query)).toEqual([]);
25
-
26
- const structuralRead = readStructuralEvidence(world, 0);
27
- expect(structuralRead.status).toBe('ok');
28
- if (structuralRead.status !== 'ok') return;
29
- expect(structuralRead.events).toEqual([expect.objectContaining({ kind: 'spawn', entity })]);
30
24
  });
31
25
 
32
26
  it('lets independent consumers observe the same component version', () => {
@@ -2,6 +2,7 @@ import { describe, expect, it } from 'vitest';
2
2
  import { componentId, defineComponent } from '../component';
3
3
  import { ChangeEpochExhaustedError } from '../errors';
4
4
  import { getDerivedWriter } from '../internal';
5
+ import { createStateProjection } from '../projection/state-projection';
5
6
  import type { Query } from '../query/query';
6
7
  import { World } from '../world';
7
8
  import { worldInternal } from '../world-internal';
@@ -31,6 +32,8 @@ describe('package-internal derived range writer contract', () => {
31
32
  const { world, query } = fixture();
32
33
  const writer = getDerivedWriter(query, Value).unwrap();
33
34
  const beforeEpoch = world[worldInternal].getMutationEpoch();
35
+ const projection = createStateProjection(world, [Value]);
36
+ projection.read().accept();
34
37
 
35
38
  expect(
36
39
  writer.writeRange(
@@ -52,6 +55,9 @@ describe('package-internal derived range writer contract', () => {
52
55
  values.push(row.get(Value).value);
53
56
  }
54
57
  expect(values).toEqual([0, 11, 12, 3]);
58
+ const candidate = projection.read();
59
+ expect(candidate.indices).toEqual([1, 2]);
60
+ expect(candidate.scannedRows).toBe(4);
55
61
 
56
62
  const graph = world[worldInternal].getGraph();
57
63
  const record = world[worldInternal].getRecords()[0];
@@ -78,9 +78,8 @@ describe('M0 ECS reduction characterization', () => {
78
78
  world.sharedRefs.release(handle).unwrap();
79
79
 
80
80
  expect(() => world.despawn(entity)).not.toThrow();
81
- expect(world.sharedRefs.readReleaseEvidence()).toEqual([
82
- { handle, refcount: 0, generation: 1, evidence: 'released' },
83
- ]);
81
+ expect(world.sharedRefs.resolve(handle).ok).toBe(false);
82
+ expect(world.sharedRefs.refcount(handle)).toBe(0);
84
83
  });
85
84
 
86
85
  it('F-07: rejects undefined shared payloads before allocating a slot', () => {
@@ -5,6 +5,7 @@ import {
5
5
  SHARED_KERNEL_EXECUTOR_RESOURCE_KEY,
6
6
  type SharedKernelExecutor,
7
7
  } from '../execution/shared-kernel';
8
+ import { createStateProjection } from '../projection/state-projection';
8
9
  import type { QuerySpan } from '../query/query';
9
10
  import { Update } from '../schedule-token';
10
11
  import { World } from '../world';
@@ -58,6 +59,8 @@ function runCase(
58
59
  world.insertResource(SHARED_KERNEL_EXECUTOR_RESOURCE_KEY, executor);
59
60
  }
60
61
  world.spawn({ component: Position, data: { x: 1 } }).unwrap();
62
+ const projection = createStateProjection(world, [Position]);
63
+ projection.read().accept();
61
64
 
62
65
  const first = defineSharedKernel(import.meta.url, {
63
66
  name: `${kind}-first`,
@@ -97,6 +100,7 @@ function runCase(
97
100
  world.addSystem(Update, second).unwrap();
98
101
 
99
102
  world.update(0).unwrap();
103
+ expect(projection.read().indices).toEqual(kind === 'read-read' ? [] : [0]);
100
104
  const [row] = world.query({ read: [Position] }).unwrap();
101
105
  return { x: row?.get(Position).x ?? Number.NaN, trace };
102
106
  }
@@ -27,7 +27,7 @@ describe('RenderReadLease contract', () => {
27
27
  expect(projection.spans[0]?.fields.y).toEqual(new Float32Array([2]));
28
28
  });
29
29
 
30
- it('publishes world and shared-ref changes from an explicit consumer version', () => {
30
+ it('publishes component changes from an explicit consumer version', () => {
31
31
  const world = new World();
32
32
  const entity = world.spawn({ component: Position, data: { x: 0, y: 0 } }).unwrap();
33
33
  const lease = createRenderReadLease(world);
@@ -35,14 +35,11 @@ describe('RenderReadLease contract', () => {
35
35
  world.set(entity, Position, { x: 3 }).unwrap();
36
36
  const batch = lease.readChanges(version);
37
37
 
38
- expect(batch.status).toBe('ok');
39
- if (batch.status !== 'ok') return;
40
38
  expect(batch.version.mutationEpoch).toBeGreaterThan(version.mutationEpoch);
41
39
  expect(batch.world.changedComponentIds).toContain(componentId(Position));
42
- expect(batch.sharedRefs.records).toEqual([]);
43
40
  });
44
41
 
45
- it('requires an explicit rebuild after structure changes', () => {
42
+ it('publishes current structure versions independently of intervening operation count', () => {
46
43
  const world = new World();
47
44
  const lease = createRenderReadLease(world);
48
45
  const version = lease.captureVersion();
@@ -53,10 +50,7 @@ describe('RenderReadLease contract', () => {
53
50
  }
54
51
 
55
52
  const batch = lease.readChanges(version);
56
- expect(batch.status).toBe('rebuild');
57
- if (batch.status !== 'rebuild') return;
58
- expect(batch.resync).toBe(true);
59
- expect(batch.reason).toBe('structure-changed');
53
+ expect(batch.version.structureEpoch).toBeGreaterThan(version.structureEpoch);
60
54
  });
61
55
 
62
56
  it('detaches idempotently and rejects reads after dispose', () => {
@@ -74,6 +68,6 @@ describe('RenderReadLease contract', () => {
74
68
  const projection = lease.querySpans(request);
75
69
 
76
70
  expect(projection).not.toBe(lease);
77
- expect(Object.keys(projection)).toEqual(['generation', 'sharedRefEpoch', 'spans']);
71
+ expect(Object.keys(projection)).toEqual(['generation', 'spans']);
78
72
  });
79
73
  });
@@ -0,0 +1,19 @@
1
+ import { expect, it, vi } from 'vitest';
2
+ import { defineComponent } from '../component';
3
+ import { World } from '../world';
4
+
5
+ it('uses component epochs to skip idle changed-query row scans', () => {
6
+ const Value = defineComponent('IdleValue', { value: 'f32' });
7
+ const world = new World();
8
+ const entity = world.spawn({ component: Value, data: { value: 1 } }).unwrap();
9
+ const query = world.query({ read: [Value], changed: [Value] }).unwrap();
10
+ expect([...query]).toHaveLength(1);
11
+ const probe = vi.spyOn(
12
+ query as unknown as { changeMatches: (...args: unknown[]) => boolean },
13
+ 'changeMatches',
14
+ );
15
+ expect([...query]).toHaveLength(0);
16
+ expect(probe).not.toHaveBeenCalled();
17
+ world.set(entity, Value, { value: 2 }).unwrap();
18
+ expect([...query]).toHaveLength(1);
19
+ });
@@ -0,0 +1,30 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { defineComponent } from '../component';
3
+ import { World } from '../world';
4
+
5
+ describe('partial component writes', () => {
6
+ it('does not materialize an existing row to validate independent patch fields', () => {
7
+ const Pose = defineComponent('PatchPose', { pos: 'array<f32, 3>', value: 'f32' });
8
+ const world = new World();
9
+ const entity = world.spawn({ component: Pose, data: { pos: [1, 2, 3] } }).unwrap();
10
+ const read = vi.spyOn(
11
+ world as unknown as { readRow: (...args: unknown[]) => unknown },
12
+ 'readRow',
13
+ );
14
+ world.set(entity, Pose, { value: 4 }).unwrap();
15
+ expect(read).not.toHaveBeenCalled();
16
+ read.mockRestore();
17
+ expect(Array.from(world.get(entity, Pose).unwrap().pos)).toEqual([1, 2, 3]);
18
+ });
19
+
20
+ it('preserves fixed-array encoding, overlap, and zero padding', () => {
21
+ const Data = defineComponent('FixedWrite', { values: 'array<f32, 4>' });
22
+ const world = new World();
23
+ const entity = world.spawn({ component: Data, data: { values: [1, 2, 3, 4] } }).unwrap();
24
+ const values = world.get(entity, Data).unwrap().values;
25
+ world.set(entity, Data, { values: values.subarray(1) }).unwrap();
26
+ expect(Array.from(world.get(entity, Data).unwrap().values)).toEqual([2, 3, 4, 0]);
27
+ world.set(entity, Data, { values: [5, 6] }).unwrap();
28
+ expect(Array.from(world.get(entity, Data).unwrap().values)).toEqual([5, 6, 0, 0]);
29
+ });
30
+ });
@@ -6,7 +6,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
6
6
  import { build } from 'tsup';
7
7
  import { expect, it } from 'vitest';
8
8
 
9
- it('release diagnostics do not keep externally disposed payloads alive', async () => {
9
+ it('final release does not retain externally disposed payloads', async () => {
10
10
  const directory = mkdtempSync(join(tmpdir(), 'forgeax-shared-ref-lifetime-'));
11
11
  try {
12
12
  await build({
@@ -41,7 +41,6 @@ it('release diagnostics do not keep externally disposed payloads alive', async (
41
41
  await new Promise(resolve => setImmediate(resolve));
42
42
  global.gc();
43
43
  }
44
- assert.equal(store.readReleaseEvidence().length, 32);
45
44
  assert.equal(store._liveCount(), 0);
46
45
  console.log(JSON.stringify({ retained: refs.filter(ref => ref.deref()).length }));
47
46
  `,
@@ -10,7 +10,6 @@ import { Update } from '../schedule-token';
10
10
  // resolve(handle) -> Result<T, SharedRefReleasedError>
11
11
  // retain(handle) -> Result<void, SharedRefReleasedError>
12
12
  // release(handle) -> Result<release evidence | undefined, ...>
13
- // readReleaseEvidence() -> bounded final-release records
14
13
  //
15
14
  // Tests are split across three describe blocks tracking the w6 / w7 / w8
16
15
  // task boundary. The first two run as TDD red against the still-absent
@@ -62,36 +61,6 @@ describe('w6 SharedRefStore: alloc + resolve', () => {
62
61
  }
63
62
  });
64
63
 
65
- it('publishes explicit in-place payload changes through one monotonic epoch', () => {
66
- const store = new SharedRefStore();
67
- const handle = store.alloc('MaterialAsset', { value: 1 });
68
-
69
- expect(store.getMutationEpoch()).toBe(0);
70
- expect(store.markChanged(handle).ok).toBe(true);
71
- expect(store.getMutationEpoch()).toBe(1);
72
- expect(store.readChangesSince(0)).toEqual({
73
- cursor: 1,
74
- records: [{ epoch: 1, handle: unwrapHandle(handle) }],
75
- });
76
-
77
- expect(store.release(handle).ok).toBe(true);
78
- expect(store.markChanged(handle).ok).toBe(false);
79
- expect(store.getMutationEpoch()).toBe(1);
80
- });
81
-
82
- it('keeps one latest mutation epoch per handle without a bounded journal', () => {
83
- const store = new SharedRefStore();
84
- const handle = store.alloc('MaterialAsset', { value: 1 });
85
- for (let index = 0; index < 4097; index += 1) store.markChanged(handle).unwrap();
86
-
87
- expect(store.readChangesSince(0)).toEqual({
88
- cursor: 4097,
89
- records: [{ epoch: 4097, handle: unwrapHandle(handle) }],
90
- });
91
- const latest = store.readChangesSince(4096);
92
- expect(latest.records).toEqual([{ epoch: 4097, handle: unwrapHandle(handle) }]);
93
- });
94
-
95
64
  it('resolve returns SharedRefStaleError after rc drops to 0 (gen incremented on release)', () => {
96
65
  const store = new SharedRefStore();
97
66
  const handle = store.alloc('MeshAsset', { id: 7 });
@@ -184,9 +153,8 @@ describe('w29 SharedRefStore: retain + structured release evidence', () => {
184
153
  expect(store.release(handle).ok).toBe(true);
185
154
  }
186
155
  expect(store.refcount(handle)).toBe(0);
187
- expect(store.readReleaseEvidence()).toEqual([
188
- { handle, refcount: 0, generation: 1, evidence: 'released' },
189
- ]);
156
+ expect(store.resolve(handle).ok).toBe(false);
157
+ expect(store.refcount(handle)).toBe(0);
190
158
  });
191
159
 
192
160
  it('final release returns the same payload/refcount/generation evidence', () => {
@@ -0,0 +1,159 @@
1
+ import { expect, test } from 'vitest';
2
+ import { defineComponent } from '../component';
3
+ import { type EntityHandle, entityIndex } from '../entity-handle';
4
+ import { createStateProjection } from '../projection/state-projection';
5
+ import { World } from '../world';
6
+
7
+ const Position = defineComponent('ProjectionPosition', { x: 'f32' });
8
+ const Extra = defineComponent('ProjectionExtra', {});
9
+ const Selected = defineComponent('ProjectionSelected', {}, { storage: 'sparse' });
10
+
11
+ test('sparse scalar changes inspect one block; failed candidates and consumers remain independent', () => {
12
+ const world = new World();
13
+ const entities = Array.from({ length: 1024 }, (_, x) =>
14
+ world.spawn({ component: Position, data: { x } }).unwrap(),
15
+ );
16
+ const first = createStateProjection(world, [Position]);
17
+ const second = createStateProjection(world, [Position]);
18
+ first.read().accept();
19
+ second.read().accept();
20
+ expect(first.read().scannedRows).toBe(0);
21
+ const changedEntity = entities[511];
22
+ if (changedEntity === undefined) throw new Error('missing fixture entity');
23
+ world.set(changedEntity, Position, { x: 9 }).unwrap();
24
+ const failed = first.read();
25
+ expect(failed.indices).toEqual([entityIndex(changedEntity)]);
26
+ expect(failed.scannedRows).toBe(256);
27
+ const retry = first.read();
28
+ expect(retry.indices).toEqual([entityIndex(changedEntity)]);
29
+ retry.accept();
30
+ expect(first.read().indices).toEqual([]);
31
+ expect(second.read().indices).toEqual([entityIndex(changedEntity)]);
32
+ expect(() => failed.accept()).toThrow();
33
+ });
34
+
35
+ test('migration, swap removal, generation reuse, sparse membership and deletion use final state', () => {
36
+ const world = new World();
37
+ const a = world.spawn({ component: Position, data: { x: 1 } }).unwrap();
38
+ const b = world.spawn({ component: Position, data: { x: 2 } }).unwrap();
39
+ const projection = createStateProjection(world, [Position, Selected]);
40
+ projection.read().accept();
41
+ world.addComponent(a, { component: Extra, data: {} }).unwrap();
42
+ world.addComponent(a, { component: Selected, data: {} }).unwrap();
43
+ world.despawn(b).unwrap();
44
+ const replacement = world.spawn({ component: Position, data: { x: 3 } }).unwrap();
45
+ const batch = projection.read();
46
+ expect(new Set(batch.indices)).toEqual(new Set([entityIndex(a), entityIndex(b)]));
47
+ expect(projection.entity(entityIndex(b))).toBe(replacement);
48
+ batch.accept();
49
+ world.removeComponent(a, Selected).unwrap();
50
+ expect(projection.read().indices).toContain(entityIndex(a));
51
+ projection.read().accept();
52
+ world.despawn(a).unwrap();
53
+ world.despawn(replacement).unwrap();
54
+ const removed = projection.read();
55
+ expect(new Set(removed.indices)).toEqual(new Set([entityIndex(a), entityIndex(b)]));
56
+ removed.accept();
57
+ expect(projection.read().indices).toEqual([]);
58
+ });
59
+
60
+ test('range writes publish their block summaries and invalidation preserves deletion evidence', () => {
61
+ const world = new World();
62
+ const entities = Array.from({ length: 600 }, () =>
63
+ world.spawn({ component: Position, data: {} }).unwrap(),
64
+ );
65
+ const projection = createStateProjection(world, [Position]);
66
+ projection.read().accept();
67
+ for (const span of world
68
+ .query({ write: [Position] })
69
+ .unwrap()
70
+ .spans()
71
+ .unwrap())
72
+ span.mut(Position).x.fill(4);
73
+ expect(projection.read().indices).toHaveLength(600);
74
+ projection.read().accept();
75
+ const removedEntity = entities[0];
76
+ if (removedEntity === undefined) throw new Error('missing fixture entity');
77
+ world.despawn(removedEntity).unwrap();
78
+ projection.invalidate();
79
+ expect(projection.read().indices).toContain(entityIndex(removedEntity));
80
+ });
81
+
82
+ test.each([
83
+ 1, 17, 731, 65537,
84
+ ])('matches an independent current-state oracle across skipped publications (seed %i)', (seed) => {
85
+ let random = seed;
86
+ const next = (limit: number) => {
87
+ random = (Math.imul(random, 1664525) + 1013904223) >>> 0;
88
+ return random % limit;
89
+ };
90
+ const world = new World();
91
+ const projection = createStateProjection(world, [Position, Selected]);
92
+ const live: EntityHandle[] = [];
93
+ const accepted = new Map<number, { entity: number; x: number; selected: boolean }>();
94
+ for (let step = 0; step < 800; step++) {
95
+ const entity = live[next(Math.max(1, live.length))];
96
+ const operation = next(6);
97
+ if (entity === undefined || operation === 0)
98
+ live.push(world.spawn({ component: Position, data: { x: next(100) } }).unwrap());
99
+ else if (operation === 1) world.set(entity, Position, { x: next(100) }).unwrap();
100
+ else if (operation === 2) {
101
+ world.despawn(entity).unwrap();
102
+ live.splice(live.indexOf(entity), 1);
103
+ } else {
104
+ const component = operation === 3 ? Extra : Selected;
105
+ if (world.hasComponent(entity, component)) world.removeComponent(entity, component).unwrap();
106
+ else world.addComponent(entity, { component, data: {} }).unwrap();
107
+ }
108
+ if (step % 7 !== 0) continue;
109
+ if (step % 31 === 0) projection.invalidate();
110
+ const candidate = projection.read();
111
+ if (step % 11 === 0) continue;
112
+ for (const index of candidate.indices) {
113
+ const current = projection.entity(index);
114
+ const position = current === undefined ? undefined : world.get(current, Position);
115
+ if (current === undefined || !position?.ok) accepted.delete(index);
116
+ else
117
+ accepted.set(index, {
118
+ entity: current,
119
+ x: position.value.x,
120
+ selected: world.hasComponent(current, Selected),
121
+ });
122
+ }
123
+ candidate.accept();
124
+ const oracle = new Map<number, { entity: number; x: number; selected: boolean }>();
125
+ for (const row of world.query({ read: [Position] }).unwrap()) {
126
+ oracle.set(entityIndex(row.entity), {
127
+ entity: row.entity,
128
+ x: row.get(Position).x,
129
+ selected: world.hasComponent(row.entity, Selected),
130
+ });
131
+ }
132
+ expect(accepted).toEqual(oracle);
133
+ }
134
+ });
135
+
136
+ test('invalidating an outstanding candidate prevents acceptance and retains the baseline', () => {
137
+ const world = new World();
138
+ const entity = world.spawn({ component: Position, data: { x: 1 } }).unwrap();
139
+ const projection = createStateProjection(world, [Position]);
140
+ projection.read().accept();
141
+ const stale = projection.read();
142
+ projection.invalidate();
143
+ expect(() => stale.accept()).toThrow();
144
+ expect(projection.read().indices).toEqual([entityIndex(entity)]);
145
+ });
146
+
147
+ test('source writes during candidate construction cannot be accepted', () => {
148
+ const world = new World();
149
+ const entity = world.spawn({ component: Position, data: { x: 1 } }).unwrap();
150
+ const projection = createStateProjection(world, [Position]);
151
+ const stale = projection.read();
152
+ world.set(entity, Position, { x: 2 }).unwrap();
153
+ expect(() => stale.validate()).toThrow();
154
+ expect(() => stale.accept()).toThrow();
155
+ const current = projection.read();
156
+ expect(current.indices).toEqual([entityIndex(entity)]);
157
+ current.accept();
158
+ expect(projection.read().indices).toEqual([]);
159
+ });