diff --git a/package.json b/package.json index 771233b9..eeec2b23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "data-monorepo", - "version": "0.9.89", + "version": "0.9.90", "private": true, "engines": { "node": ">=24" diff --git a/packages/data-ai/.claude-plugin/plugin.json b/packages/data-ai/.claude-plugin/plugin.json index 98aefbd3..b07e5aed 100644 --- a/packages/data-ai/.claude-plugin/plugin.json +++ b/packages/data-ai/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "adobe-data-ai", - "version": "0.9.89", + "version": "0.9.90", "description": "Architecture skills for @adobe/data — data-oriented modelling, archetype iteration, hot-path performance, and related conventions.", "author": { "name": "Adobe" diff --git a/packages/data-ai/.claude/rules/README.md b/packages/data-ai/.claude/rules/README.md index e97cbd55..21a57047 100644 --- a/packages/data-ai/.claude/rules/README.md +++ b/packages/data-ai/.claude/rules/README.md @@ -14,16 +14,17 @@ child gets its own file (recursing wherever the source tree does): ``` features/ - index.md # the feature layering as a whole (ui → ecs → services → data) + index.md # the feature layering as a whole (ui → services → data) data/ index.md # data-type namespaces (foundation) state.md # the State aggregate: pure transforms & derivations - services/index.md # service interfaces + service types - ecs/ - index.md # the ECS layer + layered database plugins - components.md resources.md archetypes.md - computed.md indexes.md transactions.md services.md actions.md - systems.md conformance.md + services/ + index.md # the services layer: main-service + capability contracts + main-service/ # the feature service (ECS implementation) + index.md # the service + its layered database plugins + components.md resources.md archetypes.md + computed.md indexes.md transactions.md services.md actions.md + systems.md conformance.md ui/index.md # UI (points to element / presentation / lazy-element file rules) ``` @@ -37,6 +38,6 @@ symlinks them into its own `.claude/rules/` (as it does `features/`). Each rule's `paths:` glob is scoped to `**/features/*//…`, so these rules apply only once an application opts into the feature-folder pattern (source organized under `features//`). Editing -`features//ecs/-database/components/foo.ts` pulls in both -`ecs/index.md` (the layer overview) and `ecs/components.md` (the specifics) — -at creation and at every later edit. +`features//services/main-service/core-database/components.ts` pulls in both +`main-service/index.md` (the layer overview) and `main-service/components.md` +(the specifics) — at creation and at every later edit. diff --git a/packages/data-ai/.claude/rules/element.md b/packages/data-ai/.claude/rules/element.md index e38f55a4..73526a73 100644 --- a/packages/data-ai/.claude/rules/element.md +++ b/packages/data-ai/.claude/rules/element.md @@ -124,7 +124,7 @@ Lit-only: `static styles = styles` from a sibling `*.css.ts`. `@property` exists *only* for locator inputs — never for state, never for derived values, never for parent-forwarded flags. The `P` in `DatabaseElement

` (and the `get plugin()` it returns) is the surface the element *consumes* — never the -varying topmost-layer name (see `features/ecs/index.md`): `typeof +varying topmost-layer name (see `features/services/main-service/index.md`): `typeof FeatureDatabase.plugin` for a self-contained feature. **Exception:** an element meant to be *extended* — injected with various databases that build on this feature (a peer app that adds an agent, a p2p/presence build) — types on the diff --git a/packages/data-ai/.claude/rules/features/data/state.md b/packages/data-ai/.claude/rules/features/data/state.md index 73d85dd0..f9816673 100644 --- a/packages/data-ai/.claude/rules/features/data/state.md +++ b/packages/data-ai/.claude/rules/features/data/state.md @@ -43,8 +43,8 @@ export * as State from "./public.js"; - Each transform has a sibling `*.test.ts`; performance is irrelevant here, correctness is everything. Keep its cases in a sibling `.cases.ts` typed `ConformanceCase[]` (the shared `conformance-case.ts` type) — - spec-owned truth the matching ecs conformance test imports unchanged (see - `ecs/conformance.md`). Author `before`/`after` as full `State` + spec-owned truth the matching main-service conformance test imports unchanged (see + `services/main-service/conformance.md`). Author `before`/`after` as full `State` (`{ ...State.create(), …overrides }`); the generic-slice signature lets them flow through. Tolerant full-`State` equality is the shared `expect-state-matches.ts`, alongside the cases here. diff --git a/packages/data-ai/.claude/rules/features/index.md b/packages/data-ai/.claude/rules/features/index.md index e53788db..0a9dc7ce 100644 --- a/packages/data-ai/.claude/rules/features/index.md +++ b/packages/data-ai/.claude/rules/features/index.md @@ -2,7 +2,6 @@ paths: - '**/features/*/data/**/*.ts' - '**/features/*/services/**/*.ts' - - '**/features/*/ecs/**/*.ts' - '**/features/*/ui/**/*.ts' --- @@ -14,34 +13,39 @@ trust, and an **efficient implementation** proven equivalent to it. - **`data/` is the specification.** The whole feature modelled as one immutable `State` with pure transformations over it — correct by construction, fully unit-tested, performance irrelevant. This is the source of truth. -- **`ecs/` is the implementation.** The same model physically arranged for - mutation efficiency (a reactive Entity-Component-System). Its reads and writes - wrap the `data/` functions where practical; where they must be hand-optimized, - unit tests verify they still agree with the `data/` precedent. +- **`services/main-service/` is the implementation.** The same model physically + arranged for mutation efficiency — a reactive Entity-Component-System, an + implementation detail behind the service. Its reads and writes wrap the + `data/` functions where practical; where they must be hand-optimized, unit + tests verify they still agree with the `data/` precedent. -Because the optimized `ecs/` layer is largely mechanical given the `data/` spec, -it can be generated and kept honest by AI rules, with the conformance tests as -the safety net. Net result: write a slow-but-verifiable app, then derive a fast -one that provably behaves the same. +Because the optimized `main-service` is largely mechanical given the `data/` +spec, it can be generated and kept honest by AI rules, with the conformance +tests as the safety net. Net result: write a slow-but-verifiable app, then +derive a fast one that provably behaves the same. -## The four layers +## The layers -`ui → ecs → services → data` — higher imports lower, never the reverse. `data/` +`ui → services → data` — higher imports lower, never the reverse. `data/` depends on nothing but `@adobe/data` and other `data/` declarations. A feature creates only the layers it uses. | Layer | Role | |-------|------| | `data/` | The spec: `State`, pure transforms & derivations, entity sub-types. Pure, tested. | -| `services/` | Async capability contracts (ports to the outside world). Optional. | -| `ecs/` | The implementation: the ECS materialisation + reactive reads/writes over it. | +| `services/main-service/` | The implementation: the ECS materialisation + reactive reads/writes. The **sole entrypoint** — the only service the `ui/` binds to. | +| `services/-service/` | Async capability contracts (ports to the outside world). Reached only *through* `main-service` (its actions/services wire them in), never by the UI. Optional. | | `ui/` | Presentation. | +`services/` holds two kinds of service: the one `main-service/` (ECS-backed +state, its own subtree of rules) and any async capability contracts. The UI, and +every external consumer, sees only `main-service`. + ## One app, many features An application is a set of **features**, each its own `features//` folder -with the same four layers. One base feature (`features/main/`) is the host; the -rest are peers that load lazily. +with the same layers. One base feature (`features/main/`) is the host; the rest +are peers that load lazily. **Keep each feature small; grow by adding features, not by bloating one.** A feature is meant to fit in the head — a handful of files per layer. When a @@ -53,16 +57,17 @@ its own peer feature rather than let one feature's folders balloon. base must not depend on its children — with one sanctioned exception below. - **The base `imports` every peer's *schema* plugin** — `Database.Plugin.create({ imports })`, not `extends`. `imports` merges the - peer's `core-database` (components / resources / archetypes) into the shared - store at runtime **without** pulling its types or behavior into the base's type - or bundle (`extends` would do both, and cost quadratically). So one store knows - every feature's schema — data coexists, persists, and syncs — while the base - stays decoupled. Import the peer's `core-database.ts` plugin (schema only) — - under its feature-qualified name `CoreDatabase` (see the cross-feature - naming rule in `ecs/index.md`): its indexes, transactions, computed, services, - and UI stay out until the feature loads. A column two features share (e.g. - `name`) lives in `data/` and is referenced by identity, so `combinePlugins` - dedupes it. + peer's `services/main-service/core-database` (components / resources / + archetypes) into the shared store at runtime **without** pulling its types or + behavior into the base's type or bundle (`extends` would do both, and cost + quadratically). So one store knows every feature's schema — data coexists, + persists, and syncs — while the base stays decoupled. Import the peer's + `services/main-service/core-database.ts` plugin (schema only) — under its + feature-qualified name `CoreDatabase` (see the cross-feature naming rule + in `services/main-service/index.md`): its indexes, transactions, computed, + services, and UI stay out until the feature loads. A column two features share + (e.g. `name`) lives in `data/` and is referenced by identity, so + `combinePlugins` dedupes it. - **Peers load lazily by being used.** `DatabaseElement`, on connect, walks up to the nearest ancestor database and `extend`s it with its own plugin — so the first time a feature element renders, its full plugin (indexes, transactions, @@ -71,25 +76,36 @@ its own peer feature rather than let one feature's folders balloon. load is genuinely on-demand. - **The base reaches a child only through a lazy element wrapper** — a tiny `Foo()` that `void import()`s the child element. That dynamic import is the one - allowed core→child seam; the heavy element and its service database stay in the + allowed core→child seam; the heavy element and its main-service stay in the child's own chunk. ## Spec and implementation, kept honest -The tie between `data/` (spec) and `ecs/` (implementation) is **conformance**, -one property — `toState(apply(fromState(before), args)) ≡ transform(before, args)`: -each ecs mutation, seeded and read back through a test-only `ecs ↔ State` +The tie between `data/` (spec) and `main-service` (implementation) is +**conformance**, one property — +`toState(apply(fromState(before), args)) ≡ transform(before, args)`: each +main-service mutation, seeded and read back through a test-only store↔`State` projection, equals the pure `data/` transform it stands for. The projection and -its runner live in `ecs/conformance/` (see `ecs/conformance.md`); the shared -`{ before, args, after }` cases are spec-owned (`data/state/.cases.ts`), -so conforming the ecs path is "substitute the implementation, reuse the -expectations." This lets the ecs layer be largely mechanical and agent-generated, -with the spec as oracle. *How* to author each layer lives in the per-folder rules -below. +its runner live in `services/main-service/conformance/` (see +`services/main-service/conformance.md`); the shared `{ before, args, after }` +cases are spec-owned (`data/state/.cases.ts`), so conforming the +implementation is "substitute the implementation, reuse the expectations." This +lets `main-service` be largely mechanical and agent-generated, with the spec as +oracle. *How* to author each layer lives in the per-folder rules below. + +## Reference implementations + +Working samples ship inside `@adobe/data` at +`node_modules/@adobe/data/references//src/` — read them for concrete, +current examples of this structure. `data-lit-todo` is the most complete +(multi-feature, capability services, indexes, conformance tests); +`data-lit-tictactoe` is the minimal turn-based reference. ## Per-layer detail -See the rules under each folder: `data/`, `services/`, `ecs/` (components, -resources, archetypes, computed, indexes, transactions), `ui/`. Cross-cutting -patterns live at the rules root — `namespace.md`, `data-modelling.md`, -`archetypes.md` (row iteration), `type-casts.md`, `cohesion.md`. +See the rules under each folder: `data/`, `services/` — the `main-service/` +subtree (components, resources, archetypes, computed, indexes, transactions, +systems, conformance) and capability-contract services — and `ui/`. +Cross-cutting patterns live at the rules root — `namespace.md`, +`data-modelling.md`, `archetypes.md` (row iteration), `type-casts.md`, +`cohesion.md`. diff --git a/packages/data-ai/.claude/rules/features/services/index.md b/packages/data-ai/.claude/rules/features/services/index.md index 72d5a5c6..6795e25b 100644 --- a/packages/data-ai/.claude/rules/features/services/index.md +++ b/packages/data-ai/.claude/rules/features/services/index.md @@ -3,32 +3,45 @@ paths: - '**/features/*/services/**/*.ts' --- -# services/ — async capability contracts +# services/ — the feature's services -Async ports: processing, persistence, observation, generation. A service -is the boundary between pure feature code and the outside world, which is -why its members are async — enabling cross-process portability and lazy -loading (`AsyncDataService.createLazy`). +Everything a feature exposes as a service lives here. Two kinds: -This layer holds **service interfaces**, one per `-service/` folder; -the export and folder both carry the `-service` suffix. Each is a -namespace folder (`namespace.md`). +- **`main-service/`** — the one entrypoint. The ECS-backed reactive state + service (materialisation + reads/writes over it); the only service the `ui/` + and external consumers bind to. It has its own subtree of rules + (`main-service/index.md` and the layer files under it). Every feature with + state has exactly one. +- **`-service/`** — async **capability contracts**: ports to the outside + world (processing, persistence, observation, generation). Reached only + *through* `main-service` (its service/action layers wire them in), never by the + UI. A feature has zero or more. -- The contract is an `interface` — the only place `interface` is used in - the codebase — validated immediately with +The rest of this rule governs the capability contracts; `main-service` follows +its own subtree. + +## Capability contracts + +Each is a namespace folder (`namespace.md`); the export and folder both carry the +`-service` suffix. A service is the boundary between pure feature code and the +outside world, which is why its members are async — enabling cross-process +portability and lazy loading (`AsyncDataService.createLazy`). + +- The contract is an `interface` — the only place `interface` is used in the + codebase — validated immediately with `Assert>`. - Members are async only: `void | Promise | AsyncGenerator | Observe`. - Provide `create*` factories. ## Where the I/O types live -Most input/output types belong to a single service — declare them **on -that service's namespace** (`MyService.SomeInput`) and expose them only -when something external actually references them; not everything does. +Most input/output types belong to a single service — declare them **on that +service's namespace** (`MyService.SomeInput`) and expose them only when something +external actually references them; not everything does. -A **service type** may be non-serializable (callbacks, function -signatures) — that's what distinguishes it from a `data/` type. If an I/O -value is a plain serializable value, prefer a `data/` type instead. +A **service type** may be non-serializable (callbacks, function signatures) — +that's what distinguishes it from a `data/` type. If an I/O value is a plain +serializable value, prefer a `data/` type instead. -A non-service type sits *directly* in `services/` **only** when it is -genuinely shared across more than one service — rare, but it happens. +A non-service type sits *directly* in `services/` **only** when it is genuinely +shared across more than one service — rare, but it happens. diff --git a/packages/data-ai/.claude/rules/features/ecs/actions.md b/packages/data-ai/.claude/rules/features/services/main-service/actions.md similarity index 91% rename from packages/data-ai/.claude/rules/features/ecs/actions.md rename to packages/data-ai/.claude/rules/features/services/main-service/actions.md index 2c9cc85f..ca34fbe1 100644 --- a/packages/data-ai/.claude/rules/features/ecs/actions.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/actions.md @@ -1,9 +1,9 @@ --- paths: - - '**/features/*/ecs/**/actions/**/*.ts' + - '**/features/*/services/main-service/**/actions/**/*.ts' --- -# ecs/actions/ — async orchestration +# services/main-service/actions/ — async orchestration One action per file: a function taking the **whole database** as its first argument and pure `data/` args. Actions orchestrate anything *outside* a diff --git a/packages/data-ai/.claude/rules/features/ecs/archetypes.md b/packages/data-ai/.claude/rules/features/services/main-service/archetypes.md similarity index 95% rename from packages/data-ai/.claude/rules/features/ecs/archetypes.md rename to packages/data-ai/.claude/rules/features/services/main-service/archetypes.md index 741eb58f..0fa74cc2 100644 --- a/packages/data-ai/.claude/rules/features/ecs/archetypes.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/archetypes.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/core-database/archetypes.ts' + - '**/features/*/services/main-service/**/core-database/archetypes.ts' --- # core-database/archetypes.ts — the feature's archetypes diff --git a/packages/data-ai/.claude/rules/features/ecs/components.md b/packages/data-ai/.claude/rules/features/services/main-service/components.md similarity index 90% rename from packages/data-ai/.claude/rules/features/ecs/components.md rename to packages/data-ai/.claude/rules/features/services/main-service/components.md index 10bdebfa..57fe2ef6 100644 --- a/packages/data-ai/.claude/rules/features/ecs/components.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/components.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/core-database/components.ts' + - '**/features/*/services/main-service/**/core-database/components.ts' --- # core-database/components.ts — the feature's components @@ -28,7 +28,7 @@ export const components = Database.components({ - A component name may differ from the type it stores (`position` of a `Vec3`, `mark` of a `PlayerMark`) — the field name describes the role, the schema the shape. -- **Scope = which group it sits in** (see `ecs/index.md` for the four scopes and +- **Scope = which group it sits in** (see `services/main-service/index.md` for the four scopes and their flags). `document` is the common case; hover a scope key for its meaning. Never write `nonShared` / `nonPersistent` by hand — the group applies them. diff --git a/packages/data-ai/.claude/rules/features/ecs/computed.md b/packages/data-ai/.claude/rules/features/services/main-service/computed.md similarity index 93% rename from packages/data-ai/.claude/rules/features/ecs/computed.md rename to packages/data-ai/.claude/rules/features/services/main-service/computed.md index 4d2e8590..4a8249ae 100644 --- a/packages/data-ai/.claude/rules/features/ecs/computed.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/computed.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/computed/**/*.ts' + - '**/features/*/services/main-service/**/computed/**/*.ts' --- # database/computed/ — derived observable values diff --git a/packages/data-ai/.claude/rules/features/ecs/conformance.md b/packages/data-ai/.claude/rules/features/services/main-service/conformance.md similarity index 94% rename from packages/data-ai/.claude/rules/features/ecs/conformance.md rename to packages/data-ai/.claude/rules/features/services/main-service/conformance.md index 66e1a37a..40ef49aa 100644 --- a/packages/data-ai/.claude/rules/features/ecs/conformance.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/conformance.md @@ -1,9 +1,9 @@ --- paths: - - '**/features/*/ecs/**/conformance/**/*.ts' + - '**/features/*/services/main-service/**/conformance/**/*.ts' --- -# ecs/conformance/ — spec↔implementation projection (test-only) +# services/main-service/conformance/ — spec↔implementation projection (test-only) The bridge that keeps the ecs implementation honest against the `data/` spec. **Test-only**: imported solely by `*.test.ts` and in no facet barrel, so it never @@ -19,7 +19,7 @@ The property, per `{ before, args, after }` case: Conformance test-support splits by concern along the layer boundary: -- **Store-side, here in `ecs/conformance/`:** +- **Store-side, here in `services/main-service/conformance/`:** - `from-state.ts` → `fromState(store: CoreDatabase.Store, state: State): void` seeds the store (clear tail→head → insert entities → set resources) to a `State`. - `to-state.ts` → `toState(store): State` reads the store back — each kind via diff --git a/packages/data-ai/.claude/rules/features/ecs/index.md b/packages/data-ai/.claude/rules/features/services/main-service/index.md similarity index 93% rename from packages/data-ai/.claude/rules/features/ecs/index.md rename to packages/data-ai/.claude/rules/features/services/main-service/index.md index 9de0fcb2..0c858f90 100644 --- a/packages/data-ai/.claude/rules/features/ecs/index.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/index.md @@ -1,11 +1,13 @@ --- paths: - - '**/features/*/ecs/**/*.ts' + - '**/features/*/services/main-service/**/*.ts' --- -# ecs/ — the Entity-Component-System layer +# services/main-service/ — the feature service (ECS implementation) -Everything ECS-specific lives here: the schema that stores `data/` types as +`main-service/` is the feature's single entrypoint service (see `../index.md`), +implemented as a reactive Entity-Component-System — an implementation detail +behind the service. Everything ECS-specific lives here: the schema that stores `data/` types as entity state (`core-database/`), the derived and mutating logic over it (`indexes/`, `transactions/`, `computed/`), the database-bound service factories (`services/`), the async orchestrators (`actions/`), and the layered plugins @@ -23,7 +25,7 @@ one `core-database/` folder: `core-database.ts` plus one file per facet the feature uses (all three facets are optional on `Database.Plugin.create`): ``` -ecs/core-database/ +core-database/ core-database.ts # Database.Plugin.create({ components?, resources?, archetypes? }) → CoreDatabase components.ts # export const components = Database.components({ … }) resources.ts # export const resources = Database.resources({ … }) @@ -97,7 +99,7 @@ facet folder it adds. **Name each layer for the facet it adds — never for the feature or app.** A feature creates only the layers it uses: ``` -ecs/ +main-service/ core-database/ # the schema (above) index-database/ # extends core; indexes/ transaction-database/ # extends index; transactions/ @@ -107,7 +109,7 @@ ecs/ ``` Each exports a namespace mirroring the plugin — the composed object is a -`Database` (the `@adobe/data` term) even though the folder is `ecs/`: +`Database` (the `@adobe/data` term) even though the folder is `services/main-service/`: ```ts export type IndexDatabase = Database.Plugin.ToDatabase; @@ -120,12 +122,12 @@ export namespace IndexDatabase { ### The assembled database — `FeatureDatabase` *Which* layer is topmost varies with the facets a feature uses (computed / -service / action / system). Consumers — `ui/`, the app entry, `ecs/conformance/` +service / action / system). Consumers — `ui/`, the app entry, `services/main-service/conformance/` — need the *whole* feature database but must not name that layer, or adding or dropping a layer rewrites them all. Alias it once: ```ts -// ecs/feature-database.ts +// services/main-service/feature-database.ts export { SystemDatabase as FeatureDatabase } from "./system-database/system-database.js"; ``` diff --git a/packages/data-ai/.claude/rules/features/ecs/indexes.md b/packages/data-ai/.claude/rules/features/services/main-service/indexes.md similarity index 98% rename from packages/data-ai/.claude/rules/features/ecs/indexes.md rename to packages/data-ai/.claude/rules/features/services/main-service/indexes.md index b70e8e9d..63eab1dd 100644 --- a/packages/data-ai/.claude/rules/features/ecs/indexes.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/indexes.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/indexes/**/*.ts' + - '**/features/*/services/main-service/**/indexes/**/*.ts' --- # database/indexes/ — ECS indexes diff --git a/packages/data-ai/.claude/rules/features/ecs/resources.md b/packages/data-ai/.claude/rules/features/services/main-service/resources.md similarity index 86% rename from packages/data-ai/.claude/rules/features/ecs/resources.md rename to packages/data-ai/.claude/rules/features/services/main-service/resources.md index 86a847d6..1ccd98d6 100644 --- a/packages/data-ai/.claude/rules/features/ecs/resources.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/resources.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/core-database/resources.ts' + - '**/features/*/services/main-service/**/core-database/resources.ts' --- # core-database/resources.ts — the feature's resources @@ -21,7 +21,7 @@ export const resources = Database.resources({ - Give each resource a `default` — spread the data-type's schema and add one, or bind a `data/` / primitive schema that already carries a sensible default. -- **Scope = which group it sits in** (see `ecs/index.md`). A per-device +- **Scope = which group it sits in** (see `services/main-service/index.md`). A per-device preference is `settings` (durable, `nonShared`); a synced-but-unsaved value is `presence`; a saved shared value is `document`. - Because there is only ever one instance, linear-memory packing buys nothing — diff --git a/packages/data-ai/.claude/rules/features/ecs/services.md b/packages/data-ai/.claude/rules/features/services/main-service/services.md similarity index 93% rename from packages/data-ai/.claude/rules/features/ecs/services.md rename to packages/data-ai/.claude/rules/features/services/main-service/services.md index 9293da29..6fb3ebbd 100644 --- a/packages/data-ai/.claude/rules/features/ecs/services.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/services.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/services/**/*.ts' + - '**/features/*/services/main-service/**/services/**/*.ts' --- # database/services/ — database-bound service factories diff --git a/packages/data-ai/.claude/rules/features/ecs/systems.md b/packages/data-ai/.claude/rules/features/services/main-service/systems.md similarity index 97% rename from packages/data-ai/.claude/rules/features/ecs/systems.md rename to packages/data-ai/.claude/rules/features/services/main-service/systems.md index 3b0b6d3b..aae2347b 100644 --- a/packages/data-ai/.claude/rules/features/ecs/systems.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/systems.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/systems/**/*.ts' + - '**/features/*/services/main-service/**/systems/**/*.ts' - '**/systems/*.ts' --- @@ -119,7 +119,7 @@ with no rAF and no rendering attached. ## Layer -`system-database.ts` extends the previous ecs layer (usually `ComputedDatabase`), +`system-database.ts` extends the previous main-service layer (usually `ComputedDatabase`), combined with `scheduler`, and declares the `systems` map **inline** (see above — this is the one facet not split one-per-file, because `create`'s `db` is only typed inline and standalone declarations break name inference). A `systems/` folder is @@ -127,7 +127,7 @@ optional: it holds extracted per-frame body helpers (`(db) => () => void`) only an inline body grows too large — the schedule and registration still live inline in `system-database.ts`. The headless conformance test drives one frame via `db.system.order` / `db.system.functions` and compares to the `data/` `step` oracle, -**reusing the feature projection** (`ecs/conformance.md`); it lives at +**reusing the feature projection** (`services/main-service/conformance.md`); it lives at `system-database/tick-loop.test.ts`. Test **selection/detection** logic (which entities collide, which pair resolves) separately, with seeded edge-case geometries — it's a system concern, not a transaction, and where subtle bugs hide. diff --git a/packages/data-ai/.claude/rules/features/ecs/transactions.md b/packages/data-ai/.claude/rules/features/services/main-service/transactions.md similarity index 92% rename from packages/data-ai/.claude/rules/features/ecs/transactions.md rename to packages/data-ai/.claude/rules/features/services/main-service/transactions.md index ffeaf41a..28fced9c 100644 --- a/packages/data-ai/.claude/rules/features/ecs/transactions.md +++ b/packages/data-ai/.claude/rules/features/services/main-service/transactions.md @@ -1,6 +1,6 @@ --- paths: - - '**/features/*/ecs/**/transactions/**/*.ts' + - '**/features/*/services/main-service/**/transactions/**/*.ts' --- # database/transactions/ — atomic mutations @@ -32,7 +32,7 @@ export const playMove = (t: CoreDatabase.Store, { index }: PlayMoveArgs) => { result — read the touched slice, call the `data/` transform, write the diff. - **Conform every transaction to its `data/` transform** in its sibling `*.test.ts`, via `expectConforms` over the spec's shared cases (see - `ecs/conformance.md`): seed `fromState(before)`, dispatch, assert `toState ≡ + `services/main-service/conformance.md`): seed `fromState(before)`, dispatch, assert `toState ≡ after`, covering every branch and edge case. A transaction taking **entity ids** resolves them from the seeded store in the `apply` closure; one with no `data/` analogue (`setBounds`, `setInput`) gets a direct resource assertion. diff --git a/packages/data-ai/.claude/rules/features/ui/index.md b/packages/data-ai/.claude/rules/features/ui/index.md index 6a786b5b..1bb3097e 100644 --- a/packages/data-ai/.claude/rules/features/ui/index.md +++ b/packages/data-ai/.claude/rules/features/ui/index.md @@ -5,7 +5,7 @@ paths: # ui/ — user interface -The top layer: UI that binds the `ecs/` database to what the user sees. It +The top layer: UI that binds the `services/main-service/` database to what the user sees. It owns no business logic — it subscribes to state, hands it to a pure presentation, and wires actions back to transactions. diff --git a/packages/data-ai/package.json b/packages/data-ai/package.json index 7316f368..93b42d87 100644 --- a/packages/data-ai/package.json +++ b/packages/data-ai/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data-ai", - "version": "0.9.89", + "version": "0.9.90", "description": "Cross-agent architecture skills for @adobe/data — installable as a Claude Code plugin or copied into any Agent-Skills-compatible agent (Cursor, Codex).", "type": "module", "private": false, diff --git a/packages/data-ai/skills/build-actions/SKILL.md b/packages/data-ai/skills/build-actions/SKILL.md index 139eb541..791e40fc 100644 --- a/packages/data-ai/skills/build-actions/SKILL.md +++ b/packages/data-ai/skills/build-actions/SKILL.md @@ -1,16 +1,16 @@ --- name: build-actions -description: Build a feature's ecs action-database — async orchestration over services and transactions. If the feature has async flows or side effects outside of the main store. +description: Build a feature's action-database — async orchestration over services and transactions. If the feature has async flows or side effects outside of the main store. input: feature output: feature --- Skip if this feature doesn't contain or require actions. -Create `ecs/action-database/`: `action-database.ts` (extends `ServiceDatabase`, adds `actions` +Create `services/main-service/action-database/`: `action-database.ts` (extends `ServiceDatabase`, adds `actions` from `./actions/index.js`) plus an `actions/` folder — one async orchestrator per file. An action takes `db: ServiceDatabase`, awaits `services/` ports, then commits **exactly one** transaction. -The top ecs layer; comes after `service-database`. +The top main-service layer; comes after `service-database`. -The how is in the auto-loading `features/ecs/actions.md` rule. +The how is in the auto-loading `features/services/main-service/actions.md` rule. diff --git a/packages/data-ai/skills/build-app-entry/SKILL.md b/packages/data-ai/skills/build-app-entry/SKILL.md index d5856db1..8fa11519 100644 --- a/packages/data-ai/skills/build-app-entry/SKILL.md +++ b/packages/data-ai/skills/build-app-entry/SKILL.md @@ -10,6 +10,6 @@ output: app - The base reaches a peer only through a lazy element wrapper (dynamic import), so peers load on demand. - The entry point creates the live database from `FeatureDatabase.plugin` (the base - feature's assembled database — see `features/ecs/index.md`) and mounts the root UI. + feature's assembled database — see `features/services/main-service/index.md`) and mounts the root UI. See `features/index.md` (one-app-many-features) for the wiring rules. diff --git a/packages/data-ai/skills/build-computed/SKILL.md b/packages/data-ai/skills/build-computed/SKILL.md index 2367b766..84447742 100644 --- a/packages/data-ai/skills/build-computed/SKILL.md +++ b/packages/data-ai/skills/build-computed/SKILL.md @@ -1,16 +1,16 @@ --- name: build-computed -description: Build a feature's ecs computed-database — derived observable values. +description: Build a feature's computed-database — derived observable values. input: feature output: feature --- Skip if this feature doesn't contain or require computed values. -Create `ecs/computed-database/`: `computed-database.ts` (extends the previous layer, adds +Create `services/main-service/computed-database/`: `computed-database.ts` (extends the previous layer, adds `computed` from `./computed/index.js`) plus a `computed/` folder — one `cached` derived value per file + barrel. Derivation logic lives in `data/`; a computed only wires a db observable to it. Comes after `transaction-database`. -The how is in the auto-loading `features/ecs/computed.md` rule. +The how is in the auto-loading `features/services/main-service/computed.md` rule. diff --git a/packages/data-ai/skills/build-core-database/SKILL.md b/packages/data-ai/skills/build-core-database/SKILL.md index 9587b6af..5dc302c4 100644 --- a/packages/data-ai/skills/build-core-database/SKILL.md +++ b/packages/data-ai/skills/build-core-database/SKILL.md @@ -1,11 +1,11 @@ --- name: build-core-database -description: Build a feature's ecs schema — the core-database (components, resources, archetypes). The first ecs layer. +description: Build a feature's schema — the core-database (components, resources, archetypes). The first main-service layer. input: feature output: feature --- -Create `ecs/core-database/` — `core-database.ts` plus one single-export file per facet +Create `services/main-service/core-database/` — `core-database.ts` plus one single-export file per facet the feature actually uses (`components`, `resources`, `archetypes` are each optional on `Database.Plugin.create`). Create only the facet files you need; omit the rest rather than shipping empty `Database.components({})` boilerplate. A feature with **no entities** (a @@ -20,5 +20,5 @@ The schema root; comes after `data/` (and `services/`). Bind each schema from it type — don't author shapes here. Components use JSON schemas; resources use the `{ default }` convention (a schemaless aggregate binds via `{ default: State.create() }`). -The how is in the auto-loading `features/ecs/index.md` + `components.md` / `resources.md` / +The how is in the auto-loading `features/services/main-service/index.md` + `components.md` / `resources.md` / `archetypes.md` rules. diff --git a/packages/data-ai/skills/build-game/SKILL.md b/packages/data-ai/skills/build-game/SKILL.md index 711a11c8..0679d978 100644 --- a/packages/data-ai/skills/build-game/SKILL.md +++ b/packages/data-ai/skills/build-game/SKILL.md @@ -16,6 +16,6 @@ transactions = moves/spawns, computed = score/status/winner, ui = view + input. - **Real-time** adds the `build-systems` phase: a per-frame tick loop (movement, collision, lifetime) driven by the scheduler, over many entities in distinct archetypes. Systems must stay O(1) per touched entity — never project the whole - `State` into/out of the store each frame (see `features/ecs/systems.md`). + `State` into/out of the store each frame (see `features/services/main-service/systems.md`). This is where components, archetypes, indexes, and systems all carry real weight. diff --git a/packages/data-ai/skills/build-indexes/SKILL.md b/packages/data-ai/skills/build-indexes/SKILL.md index 1a8fafb3..b13090e2 100644 --- a/packages/data-ai/skills/build-indexes/SKILL.md +++ b/packages/data-ai/skills/build-indexes/SKILL.md @@ -1,16 +1,16 @@ --- name: build-indexes -description: Build a feature's ecs index-database — component/archetype indexes for O(1) lookup. As needed. +description: Build a feature's index-database — component/archetype indexes for O(1) lookup. As needed. input: feature output: feature --- Skip if this feature doesn't contain or require indexes. -Create `ecs/index-database/`: `index-database.ts` (extends `CoreDatabase`, adds the `indexes` +Create `services/main-service/index-database/`: `index-database.ts` (extends `CoreDatabase`, adds the `indexes` facet from `./indexes/index.js`) plus an `indexes/` folder — one index per file + an `index.ts` barrel. Only if the feature needs indexed lookups. Comes after `core-database`. -The how is in the auto-loading `features/ecs/indexes.md` rule. +The how is in the auto-loading `features/services/main-service/indexes.md` rule. diff --git a/packages/data-ai/skills/build-service-database/SKILL.md b/packages/data-ai/skills/build-service-database/SKILL.md index 17489a08..4cd58503 100644 --- a/packages/data-ai/skills/build-service-database/SKILL.md +++ b/packages/data-ai/skills/build-service-database/SKILL.md @@ -1,11 +1,11 @@ --- name: build-service-database -description: Build a feature's ecs service-database — db-bound service factories. If the feature exposes services. +description: Build a feature's service-database — db-bound service factories. If the feature exposes services. input: feature output: feature --- -Create `ecs/service-database/`: `service-database.ts` (extends the previous layer, registers the +Create `services/main-service/service-database/`: `service-database.ts` (extends the previous layer, registers the `services` facet). Two forms: - db-bound factories `createService(db, …)` in `service-database/services/` (one per file + barrel), for services that read `db.observe.*` / call `db.transactions.*`; or @@ -13,4 +13,4 @@ Create `ecs/service-database/`: `service-database.ts` (extends the previous laye Comes after `computed-database`. -The how is in the auto-loading `features/ecs/services.md` rule. +The how is in the auto-loading `features/services/main-service/services.md` rule. diff --git a/packages/data-ai/skills/build-services/SKILL.md b/packages/data-ai/skills/build-services/SKILL.md index e40d265e..53e487b9 100644 --- a/packages/data-ai/skills/build-services/SKILL.md +++ b/packages/data-ai/skills/build-services/SKILL.md @@ -11,6 +11,6 @@ Create the feature's `services/` layer: one `-service/` namespace folder p contract — an `interface` (validated with `AsyncDataService.IsValid`), async-only members, and `create*` factories. -Only if the feature talks to the outside world. Comes after `data/`, before `ecs/`. +Only if the feature talks to the outside world. Comes after `data/`, before `services/main-service/`. The how is in the auto-loading `features/services/index.md` rule (and `namespace.md`). diff --git a/packages/data-ai/skills/build-systems/SKILL.md b/packages/data-ai/skills/build-systems/SKILL.md index 1beba70e..450f2f38 100644 --- a/packages/data-ai/skills/build-systems/SKILL.md +++ b/packages/data-ai/skills/build-systems/SKILL.md @@ -1,6 +1,6 @@ --- name: build-systems -description: Build a feature's ecs system-database — the real-time tick loop (systems the scheduler runs each frame). For real-time features only. +description: Build a feature's system-database — the real-time tick loop (systems the scheduler runs each frame). For real-time features only. input: feature output: feature --- @@ -8,9 +8,9 @@ output: feature Skip if this feature doesn't contain or require systems. Most games that use a canvas will use systems but most applications will not. -Create `ecs/system-database/system-database.ts`: `Database.Plugin.create({ extends: +Create `services/main-service/system-database/system-database.ts`: `Database.Plugin.create({ extends: Database.Plugin.combine(ComputedDatabase.plugin, scheduler), systems })` where the `systems` -map is declared **inline** (see `features/ecs/systems.md` — inline is required for `db` to be +map is declared **inline** (see `features/services/main-service/systems.md` — inline is required for `db` to be typed and for system-name inference; a `systems/` folder is optional, only for extracted per-frame body helpers). @@ -21,4 +21,4 @@ per-frame body helpers). combining `scheduler` (rAF), gated by the `schedulerState` resource. **Only for real-time features** (games, sims) — turn-based features skip this phase entirely. -Comes after `build-computed`. The how is in the auto-loading `features/ecs/systems.md` rule. +Comes after `build-computed`. The how is in the auto-loading `features/services/main-service/systems.md` rule. diff --git a/packages/data-ai/skills/build-transactions/SKILL.md b/packages/data-ai/skills/build-transactions/SKILL.md index 48336ab2..b789575a 100644 --- a/packages/data-ai/skills/build-transactions/SKILL.md +++ b/packages/data-ai/skills/build-transactions/SKILL.md @@ -1,15 +1,15 @@ --- name: build-transactions -description: Build a feature's ecs transaction-database — atomic mutations over the store. +description: Build a feature's transaction-database — atomic mutations over the store. input: feature output: feature --- -Create `ecs/transaction-database/`: `transaction-database.ts` (extends `IndexDatabase`, adds +Create `services/main-service/transaction-database/`: `transaction-database.ts` (extends `IndexDatabase`, adds `transactions` from `./transactions/index.js`) plus a `transactions/` folder — one mutation per file + barrel. Type the store param `CoreDatabase.Store` (entities/resources/archetypes) or `IndexDatabase.Store` (reads an index). Comes after `index-database` (or `core-database` if no indexes). -The how is in the auto-loading `features/ecs/transactions.md` rule. +The how is in the auto-loading `features/services/main-service/transactions.md` rule. diff --git a/packages/data-ai/skills/build-ui/SKILL.md b/packages/data-ai/skills/build-ui/SKILL.md index b5628fc8..e177e5c9 100644 --- a/packages/data-ai/skills/build-ui/SKILL.md +++ b/packages/data-ai/skills/build-ui/SKILL.md @@ -1,6 +1,6 @@ --- name: build-ui -description: Build a feature's ui/ layer — presentation bound to the ecs database. The final, top layer. +description: Build a feature's ui/ layer — presentation bound to the main-service database. The final, top layer. input: feature output: feature --- diff --git a/packages/data-gpu-hopper/package.json b/packages/data-gpu-hopper/package.json index 690c720f..98e048ed 100644 --- a/packages/data-gpu-hopper/package.json +++ b/packages/data-gpu-hopper/package.json @@ -1,6 +1,6 @@ { "name": "data-gpu-hopper", - "version": "0.9.89", + "version": "0.9.90", "description": "Hopper sample - real-time ECS game rendered as colored cubes via @adobe/data-gpu", "type": "module", "private": true, diff --git a/packages/data-gpu-hopper/src/features/main/ecs/conformance/create-store.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/create-store.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/conformance/create-store.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/conformance/create-store.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/conformance/create-system-database.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/create-system-database.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/conformance/create-system-database.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/conformance/create-system-database.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/conformance/drive-frame.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/drive-frame.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/conformance/drive-frame.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/conformance/drive-frame.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/conformance/expect-conforms.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/expect-conforms.ts similarity index 89% rename from packages/data-gpu-hopper/src/features/main/ecs/conformance/expect-conforms.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/conformance/expect-conforms.ts index 7e3ef768..b21919ce 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/conformance/expect-conforms.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/expect-conforms.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { it } from "vitest"; -import type { State } from "../../data/state/state.js"; -import type { ConformanceCase } from "../../data/state/conformance-case.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import type { State } from "../../../data/state/state.js"; +import type { ConformanceCase } from "../../../data/state/conformance-case.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import type { CoreDatabase } from "../core-database/core-database.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/conformance/from-state.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/from-state.ts similarity index 95% rename from packages/data-gpu-hopper/src/features/main/ecs/conformance/from-state.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/conformance/from-state.ts index 17bff968..2247f8dc 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/conformance/from-state.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/from-state.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; +import type { State } from "../../../data/state/state.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Seed a store to exactly match a `data/` `State`: clear the frog and every diff --git a/packages/data-gpu-hopper/src/features/main/ecs/conformance/projection.test.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/projection.test.ts similarity index 89% rename from packages/data-gpu-hopper/src/features/main/ecs/conformance/projection.test.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/conformance/projection.test.ts index e29f1a3b..756d6cc2 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/conformance/projection.test.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/projection.test.ts @@ -6,9 +6,9 @@ // identity test — `toState(fromState(s)) ≡ s` over representative states — // proves the projection round-trips faithfully on its own. import { describe, it } from "vitest"; -import { State } from "../../data/state/state.js"; -import type { State as StateType } from "../../data/state/state.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import { State } from "../../../data/state/state.js"; +import type { State as StateType } from "../../../data/state/state.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; import { toState } from "./to-state.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/conformance/to-state.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/to-state.ts similarity index 89% rename from packages/data-gpu-hopper/src/features/main/ecs/conformance/to-state.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/conformance/to-state.ts index ea86df82..6609af53 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/conformance/to-state.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/conformance/to-state.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; -import type { Frog } from "../../data/frog/frog.js"; -import type { Hazard } from "../../data/hazard/hazard.js"; +import type { State } from "../../../data/state/state.js"; +import type { Frog } from "../../../data/frog/frog.js"; +import type { Hazard } from "../../../data/hazard/hazard.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Read the single frog entity through the Frog archetype's full component set diff --git a/packages/data-gpu-hopper/src/features/main/ecs/core-database/archetypes.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/core-database/archetypes.ts similarity index 88% rename from packages/data-gpu-hopper/src/features/main/ecs/core-database/archetypes.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/core-database/archetypes.ts index 9cb92dc5..792669fe 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/core-database/archetypes.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/core-database/archetypes.ts @@ -2,8 +2,8 @@ import { Database } from "@adobe/data/ecs"; import { Schema } from "@adobe/data/schema"; import type { Assert, Equal } from "@adobe/data/types"; -import type { Frog as FrogRow } from "../../data/frog/frog.js"; -import type { Hazard as HazardRow } from "../../data/hazard/hazard.js"; +import type { Frog as FrogRow } from "../../../data/frog/frog.js"; +import type { Hazard as HazardRow } from "../../../data/hazard/hazard.js"; import { components } from "./components.js"; // The two moving entity shapes. The frog is a single entity distinguished by its diff --git a/packages/data-gpu-hopper/src/features/main/ecs/core-database/components.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/core-database/components.ts similarity index 92% rename from packages/data-gpu-hopper/src/features/main/ecs/core-database/components.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/core-database/components.ts index bfaba27b..6d9c280c 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/core-database/components.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/core-database/components.ts @@ -2,7 +2,7 @@ import { Database } from "@adobe/data/ecs"; import { F32 } from "@adobe/data/math"; import { Schema } from "@adobe/data/schema"; -import { HazardKind } from "../../data/hazard-kind/hazard-kind.js"; +import { HazardKind } from "../../../data/hazard-kind/hazard-kind.js"; // The row a hazard occupies — a small non-negative integer index. const laneRow = { type: "integer", minimum: 0 } as const satisfies Schema; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/core-database/core-database.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/core-database/core-database.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/core-database/core-database.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/core-database/core-database.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/core-database/resources.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/core-database/resources.ts similarity index 88% rename from packages/data-gpu-hopper/src/features/main/ecs/core-database/resources.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/core-database/resources.ts index 6d5a1345..61a07548 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/core-database/resources.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/core-database/resources.ts @@ -1,9 +1,9 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; import { Schema } from "@adobe/data/schema"; -import { GameStatus } from "../../data/game-status/game-status.js"; -import { Direction } from "../../data/direction/direction.js"; -import { Lane } from "../../data/lane/lane.js"; +import { GameStatus } from "../../../data/game-status/game-status.js"; +import { Direction } from "../../../data/direction/direction.js"; +import { Lane } from "../../../data/lane/lane.js"; // Board dimensions and the run's scalar state. Each carries the default the // resource facet requires. diff --git a/packages/data-gpu-hopper/src/features/main/ecs/feature-database.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/feature-database.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/feature-database.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/feature-database.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/system-database/outcome-selection.test.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/system-database/outcome-selection.test.ts similarity index 97% rename from packages/data-gpu-hopper/src/features/main/ecs/system-database/outcome-selection.test.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/system-database/outcome-selection.test.ts index 1889d2ad..3a0d104b 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/system-database/outcome-selection.test.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/system-database/outcome-selection.test.ts @@ -8,8 +8,8 @@ // This exercises the collision system's lane lookup + coverage narrow-phase in // isolation from movement. import { describe, it, expect } from "vitest"; -import type { State } from "../../data/state/state.js"; -import type { Lane } from "../../data/lane/lane.js"; +import type { State } from "../../../data/state/state.js"; +import type { Lane } from "../../../data/lane/lane.js"; import { createSystemDatabase } from "../conformance/create-system-database.js"; import { fromState } from "../conformance/from-state.js"; import { toState } from "../conformance/to-state.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/system-database/system-database.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/system-database/system-database.ts similarity index 96% rename from packages/data-gpu-hopper/src/features/main/ecs/system-database/system-database.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/system-database/system-database.ts index 0b6d5c51..72ee06fc 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/system-database/system-database.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/system-database/system-database.ts @@ -2,11 +2,11 @@ import { Database, scheduler } from "@adobe/data/ecs"; import type { Entity } from "@adobe/data/ecs"; import { TransactionDatabase } from "../transaction-database/transaction-database.js"; -import { GameStatus } from "../../data/game-status/game-status.js"; -import { LaneKind } from "../../data/lane-kind/lane-kind.js"; -import { Hazard } from "../../data/hazard/hazard.js"; -import { Outcome } from "../../data/outcome/outcome.js"; -import { State } from "../../data/state/state.js"; +import { GameStatus } from "../../../data/game-status/game-status.js"; +import { LaneKind } from "../../../data/lane-kind/lane-kind.js"; +import { Hazard } from "../../../data/hazard/hazard.js"; +import { Outcome } from "../../../data/outcome/outcome.js"; +import { State } from "../../../data/state/state.js"; // The real-time tick loop. Extends the transaction database (schema + // transactions — hopper has no index/computed layer) combined with the built-in diff --git a/packages/data-gpu-hopper/src/features/main/ecs/system-database/tick-loop.test.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/system-database/tick-loop.test.ts similarity index 90% rename from packages/data-gpu-hopper/src/features/main/ecs/system-database/tick-loop.test.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/system-database/tick-loop.test.ts index 25949ac5..7e1c446e 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/system-database/tick-loop.test.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/system-database/tick-loop.test.ts @@ -16,9 +16,9 @@ // assert `toState ≡ after`. Each case also asserts `State.step ≡ after` first, // keeping the shared case honest. import { describe, it } from "vitest"; -import { State } from "../../data/state/state.js"; -import { cases } from "../../data/state/step.cases.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import { State } from "../../../data/state/state.js"; +import { cases } from "../../../data/state/step.cases.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import { createSystemDatabase } from "../conformance/create-system-database.js"; import { fromState } from "../conformance/from-state.js"; import { toState } from "../conformance/to-state.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transaction-database.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transaction-database.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transaction-database.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transaction-database.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/hop.test.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/hop.test.ts similarity index 83% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/hop.test.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/hop.test.ts index 117ea2cb..ea0fb355 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/hop.test.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/hop.test.ts @@ -5,8 +5,8 @@ // needed. Every direction, edge clamp, the grid-snap, and the game-over no-op // are covered by the shared spec cases. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/hop.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/hop.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { hop } from "./hop.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/hop.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/hop.ts similarity index 85% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/hop.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/hop.ts index 35ce2ebc..3029cc3a 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/hop.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/hop.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { State } from "../../../data/state/state.js"; -import type { Direction } from "../../../data/direction/direction.js"; +import { State } from "../../../../data/state/state.js"; +import type { Direction } from "../../../../data/direction/direction.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { readFrog } from "./read-frog.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/index.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/index.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/index.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/index.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/lose-life.test.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/lose-life.test.ts similarity index 80% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/lose-life.test.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/lose-life.test.ts index 7404955e..6daf989c 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/lose-life.test.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/lose-life.test.ts @@ -3,8 +3,8 @@ // `loseLife` conforms to `State.loseLife` — spend a life and respawn, end the // game on the last life, and no-op once finished. Shared spec cases. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/lose-life.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/lose-life.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { loseLife } from "./lose-life.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/lose-life.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/lose-life.ts similarity index 93% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/lose-life.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/lose-life.ts index f776503f..c5ce0bcd 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/lose-life.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/lose-life.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { readFrog } from "./read-frog.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/new-game.test.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/new-game.test.ts similarity index 81% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/new-game.test.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/new-game.test.ts index 0a9d3582..6bdef1b8 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/new-game.test.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/new-game.test.ts @@ -4,8 +4,8 @@ // re-seeds the initial game. The shared case seeds a fully-divergent mid-run // state so the reset is proven total. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/new-game.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/new-game.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { newGame } from "./new-game.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/new-game.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/new-game.ts similarity index 95% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/new-game.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/new-game.ts index b9655c9a..9a594f1c 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/new-game.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/new-game.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Reset the whole store to the initial game (see State.create): clear the frog diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/read-frog.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/read-frog.ts similarity index 100% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/read-frog.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/read-frog.ts diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/win-goal.test.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/win-goal.test.ts similarity index 79% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/win-goal.test.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/win-goal.test.ts index 5c5e0420..66d3679a 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/win-goal.test.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/win-goal.test.ts @@ -3,8 +3,8 @@ // `winGoal` conforms to `State.winGoal` — score + win, and no-op once finished. // Shared spec cases. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/win-goal.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/win-goal.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { winGoal } from "./win-goal.js"; diff --git a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/win-goal.ts b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/win-goal.ts similarity index 90% rename from packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/win-goal.ts rename to packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/win-goal.ts index 0ee938f1..22646f0e 100644 --- a/packages/data-gpu-hopper/src/features/main/ecs/transaction-database/transactions/win-goal.ts +++ b/packages/data-gpu-hopper/src/features/main/services/main-service/transaction-database/transactions/win-goal.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Score the goal and win (see State.winGoal). A discrete atomic event — the diff --git a/packages/data-gpu-hopper/src/features/main/ui/hopper-app-plugin.ts b/packages/data-gpu-hopper/src/features/main/ui/hopper-app-plugin.ts index 507eb3b2..2245ae90 100644 --- a/packages/data-gpu-hopper/src/features/main/ui/hopper-app-plugin.ts +++ b/packages/data-gpu-hopper/src/features/main/ui/hopper-app-plugin.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; -import { FeatureDatabase } from "../ecs/feature-database.js"; +import { FeatureDatabase } from "../services/main-service/feature-database.js"; import { HopperRenderDatabase } from "./render/hopper-render-plugin.js"; // The browser application: the headless simulation (`FeatureDatabase`) plus the diff --git a/packages/data-gpu-hopper/src/features/main/ui/render/hopper-render-plugin.ts b/packages/data-gpu-hopper/src/features/main/ui/render/hopper-render-plugin.ts index e35d07e4..a9373f48 100644 --- a/packages/data-gpu-hopper/src/features/main/ui/render/hopper-render-plugin.ts +++ b/packages/data-gpu-hopper/src/features/main/ui/render/hopper-render-plugin.ts @@ -5,8 +5,8 @@ import { Mat4x4, Quat, Vec3 } from "@adobe/data/math"; import type { Aabb } from "@adobe/data/math"; import { pbrIblRender, shapeGeometry, VisibleMaterial } from "@adobe/data-gpu/graphics"; import type { Camera } from "@adobe/data-gpu/graphics"; -import { CoreDatabase } from "../../ecs/core-database/core-database.js"; -import { newGame } from "../../ecs/transaction-database/transactions/new-game.js"; +import { CoreDatabase } from "../../services/main-service/core-database/core-database.js"; +import { newGame } from "../../services/main-service/transaction-database/transactions/new-game.js"; import { Frog } from "../../data/frog/frog.js"; import { HazardKind } from "../../data/hazard-kind/hazard-kind.js"; import { LaneKind } from "../../data/lane-kind/lane-kind.js"; diff --git a/packages/data-gpu-samples/package.json b/packages/data-gpu-samples/package.json index d0d2651f..5782938b 100644 --- a/packages/data-gpu-samples/package.json +++ b/packages/data-gpu-samples/package.json @@ -1,6 +1,6 @@ { "name": "data-gpu-samples", - "version": "0.9.89", + "version": "0.9.90", "description": "WebGPU samples built on @adobe/data-gpu", "type": "module", "private": true, diff --git a/packages/data-gpu/package.json b/packages/data-gpu/package.json index 78df48ea..379f0292 100644 --- a/packages/data-gpu/package.json +++ b/packages/data-gpu/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data-gpu", - "version": "0.9.89", + "version": "0.9.90", "description": "Adobe data WebGPU plugins and types for graphics and compute", "type": "module", "private": false, diff --git a/packages/data-lit-space-rock-game/package.json b/packages/data-lit-space-rock-game/package.json index b8a03648..cec9c807 100644 --- a/packages/data-lit-space-rock-game/package.json +++ b/packages/data-lit-space-rock-game/package.json @@ -1,6 +1,6 @@ { "name": "data-lit-space-rock-game", - "version": "0.9.89", + "version": "0.9.90", "description": "Space Rock Game sample - real-time ECS game with Lit and @adobe/data", "type": "module", "private": true, diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed-database.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed-database.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed-database.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed-database.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/game-over.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/game-over.test.ts similarity index 96% rename from packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/game-over.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/game-over.test.ts index aa33a297..2d97b7c0 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/game-over.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/game-over.test.ts @@ -6,7 +6,7 @@ import { describe, it, expect } from "vitest"; import { Database } from "@adobe/data/ecs"; import type { Vec2 } from "@adobe/data/math"; -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import { ComputedDatabase } from "../computed-database.js"; const bounds: Vec2 = [800, 600]; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/game-over.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/game-over.ts similarity index 92% rename from packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/game-over.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/game-over.ts index a1d8c34c..fcf52ba4 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/game-over.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/game-over.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Whether the game is over, projected from the `lives` resource through the diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/index.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/index.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/computed-database/computed/index.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/computed-database/computed/index.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/create-store.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/create-store.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/conformance/create-store.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/create-store.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/create-system-database.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/create-system-database.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/conformance/create-system-database.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/create-system-database.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/drive-frame.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/drive-frame.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/conformance/drive-frame.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/drive-frame.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/expect-conforms.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/expect-conforms.ts similarity index 89% rename from packages/data-lit-space-rock-game/src/features/main/ecs/conformance/expect-conforms.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/expect-conforms.ts index e4327270..baf3ca2c 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/expect-conforms.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/expect-conforms.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { it } from "vitest"; -import type { State } from "../../data/state/state.js"; -import type { ConformanceCase } from "../../data/state/conformance-case.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import type { State } from "../../../data/state/state.js"; +import type { ConformanceCase } from "../../../data/state/conformance-case.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import type { CoreDatabase } from "../core-database/core-database.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/from-state.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/from-state.ts similarity index 95% rename from packages/data-lit-space-rock-game/src/features/main/ecs/conformance/from-state.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/from-state.ts index 9c56cac7..9745e1c6 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/from-state.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/from-state.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; +import type { State } from "../../../data/state/state.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Seed a store to exactly match a `data/` `State`: clear every entity, set the diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/projection.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/projection.test.ts similarity index 94% rename from packages/data-lit-space-rock-game/src/features/main/ecs/conformance/projection.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/projection.test.ts index 7448bda9..9384ad8d 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/projection.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/projection.test.ts @@ -6,8 +6,8 @@ // defect. This identity test — `toState(fromState(s)) ≡ s` over representative // states — proves the projection round-trips faithfully on its own. import { describe, it } from "vitest"; -import type { State } from "../../data/state/state.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import type { State } from "../../../data/state/state.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; import { toState } from "./to-state.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/to-state.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/to-state.ts similarity index 88% rename from packages/data-lit-space-rock-game/src/features/main/ecs/conformance/to-state.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/to-state.ts index 6de81aa6..6779998a 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/conformance/to-state.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/conformance/to-state.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; -import type { Ship } from "../../data/ship/ship.js"; -import type { Bullet } from "../../data/bullet/bullet.js"; -import type { Asteroid } from "../../data/asteroid/asteroid.js"; +import type { State } from "../../../data/state/state.js"; +import type { Ship } from "../../../data/ship/ship.js"; +import type { Bullet } from "../../../data/bullet/bullet.js"; +import type { Asteroid } from "../../../data/asteroid/asteroid.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Read a store back into a `data/` `State` — the inverse of `fromState`. Each diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/core-database/archetypes.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/archetypes.ts similarity index 88% rename from packages/data-lit-space-rock-game/src/features/main/ecs/core-database/archetypes.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/archetypes.ts index dd118e79..7e023e64 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/core-database/archetypes.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/archetypes.ts @@ -2,9 +2,9 @@ import { Database } from "@adobe/data/ecs"; import { Schema } from "@adobe/data/schema"; import type { Assert, Equal } from "@adobe/data/types"; -import type { Ship } from "../../data/ship/ship.js"; -import type { Asteroid } from "../../data/asteroid/asteroid.js"; -import type { Bullet } from "../../data/bullet/bullet.js"; +import type { Ship } from "../../../data/ship/ship.js"; +import type { Asteroid } from "../../../data/asteroid/asteroid.js"; +import type { Bullet } from "../../../data/bullet/bullet.js"; import { components } from "./components.js"; // The three entity shapes. Each is a genuinely distinct component set; the diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/core-database/components.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/components.ts similarity index 94% rename from packages/data-lit-space-rock-game/src/features/main/ecs/core-database/components.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/components.ts index 58aeccc0..f47054b2 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/core-database/components.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/components.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; import { Vec2, F32 } from "@adobe/data/math"; -import { Size } from "../../data/size/size.js"; +import { Size } from "../../../data/size/size.js"; // The shared entity component columns, bound by identity to their data/ schemas. // `position` and `velocity` are declared once and referenced by the Ship, diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/core-database/core-database.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/core-database.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/core-database/core-database.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/core-database.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/core-database/resources.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/resources.ts similarity index 94% rename from packages/data-lit-space-rock-game/src/features/main/ecs/core-database/resources.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/resources.ts index 564d151b..073090bc 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/core-database/resources.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/core-database/resources.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; import { Vec2, F32 } from "@adobe/data/math"; -import { Input } from "../../data/input/input.js"; +import { Input } from "../../../data/input/input.js"; // The singleton simulation state. Each entry is a Schema carrying a `default`; // where the data/ schema's own default fits it is bound by identity, otherwise diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/feature-database.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/feature-database.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/feature-database.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/feature-database.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/index-database/index-database.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/index-database/index-database.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/index-database/index-database.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/index-database/index-database.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/index-database/indexes/by-cell.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/index-database/indexes/by-cell.ts similarity index 93% rename from packages/data-lit-space-rock-game/src/features/main/ecs/index-database/indexes/by-cell.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/index-database/indexes/by-cell.ts index 51f6e8d9..54ef5f5a 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/index-database/indexes/by-cell.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/index-database/indexes/by-cell.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { Spatial } from "../../../data/spatial/spatial.js"; +import { Spatial } from "../../../../data/spatial/spatial.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Broad-phase spatial index: cell id → the entities currently in that cell. diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/index-database/indexes/index.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/index-database/indexes/index.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/index-database/indexes/index.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/index-database/indexes/index.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/system-database/collision-detection.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/collision-detection.test.ts similarity index 96% rename from packages/data-lit-space-rock-game/src/features/main/ecs/system-database/collision-detection.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/collision-detection.test.ts index ccf91296..d70a5a6a 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/system-database/collision-detection.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/collision-detection.test.ts @@ -11,10 +11,10 @@ // cases put an overlapping pair in DIFFERENT cells, and a non-overlapping pair // where a naive same-cell test might false-positive / false-negative. import { describe, it, expect } from "vitest"; -import type { State } from "../../data/state/state.js"; -import { Ship } from "../../data/ship/ship.js"; -import { Input } from "../../data/input/input.js"; -import { Size } from "../../data/size/size.js"; +import type { State } from "../../../data/state/state.js"; +import { Ship } from "../../../data/ship/ship.js"; +import { Input } from "../../../data/input/input.js"; +import { Size } from "../../../data/size/size.js"; import { createSystemDatabase } from "../conformance/create-system-database.js"; import { fromState } from "../conformance/from-state.js"; import { toState } from "../conformance/to-state.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/system-database/system-database.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/system-database.ts similarity index 97% rename from packages/data-lit-space-rock-game/src/features/main/ecs/system-database/system-database.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/system-database.ts index 2bc67dc5..4842f9df 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/system-database/system-database.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/system-database.ts @@ -3,13 +3,13 @@ import { Database, scheduler } from "@adobe/data/ecs"; import type { Entity } from "@adobe/data/ecs"; import { Vec2 } from "@adobe/data/math"; import { ComputedDatabase } from "../computed-database/computed-database.js"; -import { Motion } from "../../data/motion/motion.js"; -import { Spatial } from "../../data/spatial/spatial.js"; -import { Collision } from "../../data/collision/collision.js"; -import { Asteroid } from "../../data/asteroid/asteroid.js"; -import { Bullet } from "../../data/bullet/bullet.js"; -import { Ship } from "../../data/ship/ship.js"; -import { State } from "../../data/state/state.js"; +import { Motion } from "../../../data/motion/motion.js"; +import { Spatial } from "../../../data/spatial/spatial.js"; +import { Collision } from "../../../data/collision/collision.js"; +import { Asteroid } from "../../../data/asteroid/asteroid.js"; +import { Bullet } from "../../../data/bullet/bullet.js"; +import { Ship } from "../../../data/ship/ship.js"; +import { State } from "../../../data/state/state.js"; // The real-time tick loop. Extends the computed database (schema + indexes + // transactions + computed) combined with the built-in `scheduler`, and declares diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/system-database/tick-loop.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/tick-loop.test.ts similarity index 90% rename from packages/data-lit-space-rock-game/src/features/main/ecs/system-database/tick-loop.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/tick-loop.test.ts index 04a29277..2cee6508 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/system-database/tick-loop.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/system-database/tick-loop.test.ts @@ -14,9 +14,9 @@ // drive one headless frame, then assert `toState(db.store) ≡ after`. Each case // also asserts `State.step ≡ after` first, keeping the shared case honest. import { describe, it } from "vitest"; -import { State } from "../../data/state/state.js"; -import { cases } from "../../data/state/step.cases.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import { State } from "../../../data/state/state.js"; +import { cases } from "../../../data/state/step.cases.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import { createSystemDatabase } from "../conformance/create-system-database.js"; import { fromState } from "../conformance/from-state.js"; import { toState } from "../conformance/to-state.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transaction-database.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transaction-database.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transaction-database.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transaction-database.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/clear-entities.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/clear-entities.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/clear-entities.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/clear-entities.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/fire-bullet.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/fire-bullet.test.ts similarity index 82% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/fire-bullet.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/fire-bullet.test.ts index c217212d..ecef0627 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/fire-bullet.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/fire-bullet.test.ts @@ -4,8 +4,8 @@ // the muzzle kinematics to the transform, and inserts the bullet — leaving any // bullets already in flight untouched. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/fire-bullet.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/fire-bullet.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { fireBullet } from "./fire-bullet.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/fire-bullet.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/fire-bullet.ts similarity index 93% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/fire-bullet.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/fire-bullet.ts index 5ea2c8a1..fbb3e830 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/fire-bullet.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/fire-bullet.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { readShip } from "./read-ship.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/hit-asteroid.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/hit-asteroid.test.ts similarity index 89% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/hit-asteroid.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/hit-asteroid.test.ts index 571f558f..38eaadf7 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/hit-asteroid.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/hit-asteroid.test.ts @@ -11,11 +11,11 @@ import { describe } from "vitest"; import type { Entity } from "@adobe/data/ecs"; import { Vec2 } from "@adobe/data/math"; -import { State } from "../../../data/state/state.js"; -import { Collision } from "../../../data/collision/collision.js"; -import { Bullet } from "../../../data/bullet/bullet.js"; -import { Asteroid } from "../../../data/asteroid/asteroid.js"; -import { cases } from "../../../data/state/resolve-bullet-hits.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { Collision } from "../../../../data/collision/collision.js"; +import { Bullet } from "../../../../data/bullet/bullet.js"; +import { Asteroid } from "../../../../data/asteroid/asteroid.js"; +import { cases } from "../../../../data/state/resolve-bullet-hits.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { hitAsteroid } from "./hit-asteroid.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/hit-asteroid.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/hit-asteroid.ts similarity index 94% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/hit-asteroid.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/hit-asteroid.ts index 03244606..62925bf9 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/hit-asteroid.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/hit-asteroid.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import type { Entity } from "@adobe/data/ecs"; -import { Asteroid } from "../../../data/asteroid/asteroid.js"; +import { Asteroid } from "../../../../data/asteroid/asteroid.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // The outcome of a bullet striking an asteroid, dispatched by the collision diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/index.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/index.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/index.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/index.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/lose-life.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/lose-life.test.ts similarity index 83% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/lose-life.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/lose-life.test.ts index e6585ccd..3d659f28 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/lose-life.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/lose-life.test.ts @@ -8,11 +8,11 @@ // the ship is struck, so the outcome equals the transform on every case // (struck, untouched, lives already zero, and the empty field). import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { Collision } from "../../../data/collision/collision.js"; -import { Ship } from "../../../data/ship/ship.js"; -import { Asteroid } from "../../../data/asteroid/asteroid.js"; -import { cases } from "../../../data/state/resolve-ship-hits.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { Collision } from "../../../../data/collision/collision.js"; +import { Ship } from "../../../../data/ship/ship.js"; +import { Asteroid } from "../../../../data/asteroid/asteroid.js"; +import { cases } from "../../../../data/state/resolve-ship-hits.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { loseLife } from "./lose-life.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/lose-life.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/lose-life.ts similarity index 94% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/lose-life.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/lose-life.ts index 3298b214..b5203212 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/lose-life.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/lose-life.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Vec2 } from "@adobe/data/math"; -import { Ship } from "../../../data/ship/ship.js"; +import { Ship } from "../../../../data/ship/ship.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { readShip } from "./read-ship.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/new-game.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/new-game.test.ts similarity index 84% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/new-game.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/new-game.test.ts index 76de3937..81904dd7 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/new-game.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/new-game.test.ts @@ -4,8 +4,8 @@ // the seeded store (deliberately dirty) is cleared and rebuilt into the fresh // game the transform computes from the bounds alone. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/create-initial.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/create-initial.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { setBounds } from "./set-bounds.js"; import { newGame } from "./new-game.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/new-game.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/new-game.ts similarity index 93% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/new-game.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/new-game.ts index e51afc2c..d806df22 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/new-game.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/new-game.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { clearEntities } from "./clear-entities.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/read-asteroids.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/read-asteroids.ts similarity index 91% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/read-asteroids.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/read-asteroids.ts index f5b7390c..92642a0a 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/read-asteroids.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/read-asteroids.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { Asteroid } from "../../../data/asteroid/asteroid.js"; +import type { Asteroid } from "../../../../data/asteroid/asteroid.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // The current asteroids projected back to their data/ values — the slice diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/read-ship.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/read-ship.ts similarity index 93% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/read-ship.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/read-ship.ts index 4aff6a85..d5b4aacd 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/read-ship.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/read-ship.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import type { Entity } from "@adobe/data/ecs"; -import type { Ship } from "../../../data/ship/ship.js"; +import type { Ship } from "../../../../data/ship/ship.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // The single ship projected back to its data/ value, paired with its entity id diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-bounds.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-bounds.test.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-bounds.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-bounds.test.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-bounds.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-bounds.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-bounds.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-bounds.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-input.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-input.test.ts similarity index 100% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-input.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-input.test.ts diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-input.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-input.ts similarity index 86% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-input.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-input.ts index 0287b425..c02e158d 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/set-input.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/set-input.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { Input } from "../../../data/input/input.js"; +import type { Input } from "../../../../data/input/input.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Record the player's intent for upcoming ticks. The UI dispatches this on diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/spawn-wave.test.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/spawn-wave.test.ts similarity index 82% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/spawn-wave.test.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/spawn-wave.test.ts index 57ff36c7..98d51ded 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/spawn-wave.test.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/spawn-wave.test.ts @@ -4,8 +4,8 @@ // the seeded store, defers the count and ring layout to the transform, and // inserts the result — a no-op while asteroids remain. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/spawn-wave.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/spawn-wave.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { spawnWave } from "./spawn-wave.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/spawn-wave.ts b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/spawn-wave.ts similarity index 94% rename from packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/spawn-wave.ts rename to packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/spawn-wave.ts index e8853fff..3429788b 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ecs/transaction-database/transactions/spawn-wave.ts +++ b/packages/data-lit-space-rock-game/src/features/main/services/main-service/transaction-database/transactions/spawn-wave.ts @@ -1,5 +1,5 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { State } from "../../../data/state/state.js"; +import { State } from "../../../../data/state/state.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { readAsteroids } from "./read-asteroids.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game-element.ts b/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game-element.ts index 9af5898d..aa343bfe 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game-element.ts +++ b/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game-element.ts @@ -11,7 +11,7 @@ import { useRef, useWindowEvent, } from "@adobe/data-lit"; -import { FeatureDatabase } from "../../ecs/feature-database.js"; +import { FeatureDatabase } from "../../services/main-service/feature-database.js"; import type { Input } from "../../data/input/input.js"; import type { Size } from "../../data/size/size.js"; import { styles } from "./space-rock-game.css.js"; diff --git a/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game.ts b/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game.ts index dc2c2a5e..b9485e31 100644 --- a/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game.ts +++ b/packages/data-lit-space-rock-game/src/features/main/ui/space-rock-game/space-rock-game.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { html, type TemplateResult } from "lit"; -import type { SystemDatabase } from "../../ecs/system-database/system-database.js"; +import type { SystemDatabase } from "../../services/main-service/system-database/system-database.js"; /** * Public lazy wrapper for the Space Rock Game element. Dynamically imports the diff --git a/packages/data-lit-space-rock-game/src/index.ts b/packages/data-lit-space-rock-game/src/index.ts index 740680f0..b9a8213b 100644 --- a/packages/data-lit-space-rock-game/src/index.ts +++ b/packages/data-lit-space-rock-game/src/index.ts @@ -7,7 +7,7 @@ // consumers (per the cross-feature naming rule). Carries `.plugin` (schema + // indexes + transactions + computed, combined with the built-in rAF scheduler) // and `.Store` for consumers that build their own database from it. -export { FeatureDatabase as SpaceRockGameDatabase } from "./features/main/ecs/feature-database.js"; +export { FeatureDatabase as SpaceRockGameDatabase } from "./features/main/services/main-service/feature-database.js"; export { SpaceRockGame } from "./features/main/ui/space-rock-game/space-rock-game.js"; export { SpaceRockGameElement } from "./features/main/ui/space-rock-game/space-rock-game-element.js"; diff --git a/packages/data-lit-space-rock-game/src/main.ts b/packages/data-lit-space-rock-game/src/main.ts index 9e1db387..9d7f51a9 100644 --- a/packages/data-lit-space-rock-game/src/main.ts +++ b/packages/data-lit-space-rock-game/src/main.ts @@ -3,7 +3,7 @@ import { render } from "lit"; import { Database } from "@adobe/data/ecs"; import { SpaceRockGame } from "./features/main/ui/space-rock-game/space-rock-game.js"; -import { FeatureDatabase } from "./features/main/ecs/feature-database.js"; +import { FeatureDatabase } from "./features/main/services/main-service/feature-database.js"; const app = document.getElementById("app"); if (app) { diff --git a/packages/data-lit-tictactoe/package.json b/packages/data-lit-tictactoe/package.json index dbc1d78f..7ed3e419 100644 --- a/packages/data-lit-tictactoe/package.json +++ b/packages/data-lit-tictactoe/package.json @@ -1,6 +1,6 @@ { "name": "data-lit-tictactoe", - "version": "0.9.89", + "version": "0.9.90", "description": "Tic-Tac-Toe sample - Lit web components with @adobe/data-lit and AgenticService", "type": "module", "private": true, diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed-database.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed-database.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed-database.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed-database.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/board.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/board.ts similarity index 85% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/board.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/board.ts index 8f095ddc..2e1c676d 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/board.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/board.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; -import type { PlacedMark } from "../../../data/placed-mark/placed-mark.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; +import type { PlacedMark } from "../../../../data/placed-mark/placed-mark.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; // The board snapshot, derived reactively from the placed-mark entities. The diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/current-player.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/current-player.ts similarity index 85% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/current-player.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/current-player.ts index ef472fc4..27ae8550 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/current-player.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/current-player.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; import { board } from "./board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/index.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/index.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/index.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/index.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/is-game-over.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/is-game-over.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/is-game-over.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/is-game-over.ts index f1d0fd33..8463cd41 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/is-game-over.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/is-game-over.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; import { board } from "./board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/move-count.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/move-count.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/move-count.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/move-count.ts index 9361f492..edd7b45a 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/move-count.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/move-count.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; import { board } from "./board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/state.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/state.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/state.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/state.ts index caaa11d6..dfcae65a 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/state.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/state.ts @@ -1,9 +1,9 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; -import type { PlacedMark } from "../../../data/placed-mark/placed-mark.js"; -import type { State } from "../../../data/state/state.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; +import type { PlacedMark } from "../../../../data/placed-mark/placed-mark.js"; +import type { State } from "../../../../data/state/state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; // The full logical `State` projected from the ECS — the conformance anchor diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/status.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/status.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/status.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/status.ts index 3b91cd7f..d65d7e44 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/status.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/status.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; import { board } from "./board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/winner.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/winner.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/winner.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/winner.ts index 6ff6be97..644e4583 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/winner.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/winner.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; import { board } from "./board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/winning-line.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/winning-line.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/winning-line.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/winning-line.ts index 6046b76e..33dcc4d4 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/computed-database/computed/winning-line.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/computed-database/computed/winning-line.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import { BoardState } from "../../../data/board-state/board-state.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; import { board } from "./board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/create-store.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/create-store.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/conformance/create-store.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/create-store.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/expect-conforms.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/expect-conforms.ts similarity index 89% rename from packages/data-lit-tictactoe/src/features/main/ecs/conformance/expect-conforms.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/expect-conforms.ts index 425d1b8e..70ab6e41 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/expect-conforms.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/expect-conforms.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { it } from "vitest"; -import type { State } from "../../data/state/state.js"; -import type { ConformanceCase } from "../../data/state/conformance-case.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import type { State } from "../../../data/state/state.js"; +import type { ConformanceCase } from "../../../data/state/conformance-case.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import type { CoreDatabase } from "../core-database/core-database.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/from-state.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/from-state.ts similarity index 91% rename from packages/data-lit-tictactoe/src/features/main/ecs/conformance/from-state.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/from-state.ts index a2c2648a..2e5e097c 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/from-state.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/from-state.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; -import { PlayerMark } from "../../data/player-mark/player-mark.js"; +import type { State } from "../../../data/state/state.js"; +import { PlayerMark } from "../../../data/player-mark/player-mark.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Seed a store to exactly match a `data/` `State`: clear every placed mark, set diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/projection.test.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/projection.test.ts similarity index 90% rename from packages/data-lit-tictactoe/src/features/main/ecs/conformance/projection.test.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/projection.test.ts index 6206bdb8..2de27bce 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/projection.test.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/projection.test.ts @@ -6,8 +6,8 @@ // identity test — `toState(fromState(s)) ≡ s` over representative states — // proves the projection round-trips faithfully on its own. import { describe, it } from "vitest"; -import type { State } from "../../data/state/state.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import type { State } from "../../../data/state/state.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; import { toState } from "./to-state.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/to-state.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/to-state.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/conformance/to-state.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/to-state.ts index d6a6f060..3488c548 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/conformance/to-state.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/conformance/to-state.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; -import { BoardState } from "../../data/board-state/board-state.js"; -import type { PlacedMark } from "../../data/placed-mark/placed-mark.js"; +import type { State } from "../../../data/state/state.js"; +import { BoardState } from "../../../data/board-state/board-state.js"; +import type { PlacedMark } from "../../../data/placed-mark/placed-mark.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Read a store back into a `data/` `State` — the inverse of `fromState`. The diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/core-database/archetypes.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/archetypes.ts similarity index 87% rename from packages/data-lit-tictactoe/src/features/main/ecs/core-database/archetypes.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/archetypes.ts index 12c40600..6c75b9be 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/core-database/archetypes.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/archetypes.ts @@ -2,7 +2,7 @@ import { Database } from "@adobe/data/ecs"; import { Schema } from "@adobe/data/schema"; import type { Assert, Equal } from "@adobe/data/types"; -import type { PlacedMark as PlacedMarkRow } from "../../data/placed-mark/placed-mark.js"; +import type { PlacedMark as PlacedMarkRow } from "../../../data/placed-mark/placed-mark.js"; import { components } from "./components.js"; export const archetypes = Database.archetypes(components, { diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/core-database/components.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/components.ts similarity index 63% rename from packages/data-lit-tictactoe/src/features/main/ecs/core-database/components.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/components.ts index 1a24be29..d6506ded 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/core-database/components.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/components.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; -import { CellIndex } from "../../data/cell-index/cell-index.js"; -import { PlayerMark } from "../../data/player-mark/player-mark.js"; +import { CellIndex } from "../../../data/cell-index/cell-index.js"; +import { PlayerMark } from "../../../data/player-mark/player-mark.js"; export const components = Database.components({ document: { diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/core-database/core-database.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/core-database.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/core-database/core-database.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/core-database.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/core-database/resources.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/resources.ts similarity index 69% rename from packages/data-lit-tictactoe/src/features/main/ecs/core-database/resources.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/resources.ts index 4366ae1a..17ca2f9b 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/core-database/resources.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/core-database/resources.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; -import { PlayerMark } from "../../data/player-mark/player-mark.js"; -import { Score } from "../../data/score/score.js"; +import { PlayerMark } from "../../../data/player-mark/player-mark.js"; +import { Score } from "../../../data/score/score.js"; export const resources = Database.resources({ document: { diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/feature-database.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/feature-database.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/feature-database.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/feature-database.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/index-database/index-database.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/index-database/index-database.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/index-database/index-database.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/index-database/index-database.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/index-database/indexes/by-cell.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/index-database/indexes/by-cell.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/index-database/indexes/by-cell.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/index-database/indexes/by-cell.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/index-database/indexes/index.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/index-database/indexes/index.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/index-database/indexes/index.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/index-database/indexes/index.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/service-database/service-database.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/service-database.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/service-database/service-database.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/service-database.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/service-database/services/create-agent-service.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/services/create-agent-service.ts similarity index 94% rename from packages/data-lit-tictactoe/src/features/main/ecs/service-database/services/create-agent-service.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/services/create-agent-service.ts index b3911cbe..9c3fe1d3 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/service-database/services/create-agent-service.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/services/create-agent-service.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Observe } from "@adobe/data/observe"; import { AgenticService } from "@adobe/data/service"; -import { BoardState } from "../../../data/board-state/board-state.js"; -import type { PlayerMark } from "../../../data/player-mark/player-mark.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; +import type { PlayerMark } from "../../../../data/player-mark/player-mark.js"; import { board as boardComputed } from "../../computed-database/computed/board.js"; import type { ComputedDatabase } from "../../computed-database/computed-database.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/service-database/services/create-root-agent-service.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/services/create-root-agent-service.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/service-database/services/create-root-agent-service.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/services/create-root-agent-service.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/service-database/services/index.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/services/index.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/service-database/services/index.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/service-database/services/index.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transaction-database.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transaction-database.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transaction-database.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transaction-database.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/index.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/index.ts similarity index 100% rename from packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/index.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/index.ts diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/play-move.test.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/play-move.test.ts similarity index 85% rename from packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/play-move.test.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/play-move.test.ts index eac7425d..f12aeb3a 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/play-move.test.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/play-move.test.ts @@ -6,8 +6,8 @@ // alternation, win, occupied / out-of-bounds / game-over no-ops) is covered by // the shared cases. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/play-move.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/play-move.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { playMove } from "./play-move.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/play-move.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/play-move.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/play-move.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/play-move.ts index f60505ff..da85c2bf 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/play-move.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/play-move.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { BoardState } from "../../../data/board-state/board-state.js"; -import { PlayMoveArgs } from "../../../data/play-move-args/play-move-args.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; +import { PlayMoveArgs } from "../../../../data/play-move-args/play-move-args.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { readBoard } from "./read-board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/read-board.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/read-board.ts similarity index 82% rename from packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/read-board.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/read-board.ts index 07b281ba..ebf9166a 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/read-board.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/read-board.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { BoardState } from "../../../data/board-state/board-state.js"; -import type { PlacedMark } from "../../../data/placed-mark/placed-mark.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; +import type { PlacedMark } from "../../../../data/placed-mark/placed-mark.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Synchronously project the placed-mark entities into a BoardState snapshot, diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/restart-game.test.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/restart-game.test.ts similarity index 83% rename from packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/restart-game.test.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/restart-game.test.ts index fc04c0d4..ae3420e5 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/restart-game.test.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/restart-game.test.ts @@ -5,8 +5,8 @@ // shared cases cover each scoreboard outcome — X win, O win, draw, and an // unfinished restart that bumps no counter. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/restart-game.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/restart-game.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { restartGame } from "./restart-game.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/restart-game.ts b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/restart-game.ts similarity index 87% rename from packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/restart-game.ts rename to packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/restart-game.ts index 4ff6b613..d2f0a219 100644 --- a/packages/data-lit-tictactoe/src/features/main/ecs/transaction-database/transactions/restart-game.ts +++ b/packages/data-lit-tictactoe/src/features/main/services/main-service/transaction-database/transactions/restart-game.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import { BoardState } from "../../../data/board-state/board-state.js"; -import { PlayerMark } from "../../../data/player-mark/player-mark.js"; +import { BoardState } from "../../../../data/board-state/board-state.js"; +import { PlayerMark } from "../../../../data/player-mark/player-mark.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; import { readBoard } from "./read-board.js"; diff --git a/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-app/tictactoe-app.ts b/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-app/tictactoe-app.ts index 2c34c02a..9401127e 100644 --- a/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-app/tictactoe-app.ts +++ b/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-app/tictactoe-app.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { html, type TemplateResult } from "lit"; -import type { ComputedDatabase } from "../../ecs/computed-database/computed-database.js"; +import type { ComputedDatabase } from "../../services/main-service/computed-database/computed-database.js"; type TictactoeService = ComputedDatabase; diff --git a/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-cell/observe-cell.ts b/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-cell/observe-cell.ts index 7d95d5ce..499bc092 100644 --- a/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-cell/observe-cell.ts +++ b/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-cell/observe-cell.ts @@ -3,7 +3,7 @@ import { Observe } from "@adobe/data/observe"; import type { UIService } from "@adobe/data/service"; import { BoardCell } from "../../data/board-cell/board-cell.js"; import { GameStatus } from "../../data/game-status/game-status.js"; -import type { ComputedDatabase } from "../../ecs/computed-database/computed-database.js"; +import type { ComputedDatabase } from "../../services/main-service/computed-database/computed-database.js"; // Reactive per-cell view. The mark is looked up through the `byCell` index — // the cell binds to whichever entity occupies its board position — while diff --git a/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-element.ts b/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-element.ts index 5ed809a8..f51dd372 100644 --- a/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-element.ts +++ b/packages/data-lit-tictactoe/src/features/main/ui/tictactoe-element.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { DatabaseElement } from "@adobe/data-lit"; -import { ComputedDatabase } from "../ecs/computed-database/computed-database.js"; +import { ComputedDatabase } from "../services/main-service/computed-database/computed-database.js"; /** * Base class for all Tic-Tac-Toe elements. Deliberately typed on the minimal diff --git a/packages/data-lit-tictactoe/src/index.ts b/packages/data-lit-tictactoe/src/index.ts index 0b03f47a..902d7572 100644 --- a/packages/data-lit-tictactoe/src/index.ts +++ b/packages/data-lit-tictactoe/src/index.ts @@ -7,12 +7,12 @@ // services. Feature-qualified per the cross-feature naming rule so a peer or // downstream package never collides with another feature's database. Carries // `.plugin` / `.Store` for consumers that build their own database. -export { FeatureDatabase as TictactoeDatabase } from "./features/main/ecs/feature-database.js"; +export { FeatureDatabase as TictactoeDatabase } from "./features/main/services/main-service/feature-database.js"; // The base game database — all game logic (resources, transactions, computed), // no AI. Combine its `.plugin` with P2P-specific plugins, or reach for // `TictactoeDatabase` to get the agent-extended assembly. -export { ComputedDatabase as TictactoeGameDatabase } from "./features/main/ecs/computed-database/computed-database.js"; +export { ComputedDatabase as TictactoeGameDatabase } from "./features/main/services/main-service/computed-database/computed-database.js"; export { Tictactoe } from "./features/main/ui/tictactoe-app/tictactoe-app.js"; export { TictactoeElement } from "./features/main/ui/tictactoe-element.js"; diff --git a/packages/data-lit-tictactoe/src/main.ts b/packages/data-lit-tictactoe/src/main.ts index 8fa8a2d5..d87f3c3f 100644 --- a/packages/data-lit-tictactoe/src/main.ts +++ b/packages/data-lit-tictactoe/src/main.ts @@ -3,7 +3,7 @@ import { render } from "lit"; import { Database } from "@adobe/data/ecs"; import { Tictactoe } from "./features/main/ui/tictactoe-app/tictactoe-app.js"; -import { FeatureDatabase } from "./features/main/ecs/feature-database.js"; +import { FeatureDatabase } from "./features/main/services/main-service/feature-database.js"; const app = document.getElementById("app"); if (app) { diff --git a/packages/data-lit-todo/package.json b/packages/data-lit-todo/package.json index 2b445de0..a200e53e 100644 --- a/packages/data-lit-todo/package.json +++ b/packages/data-lit-todo/package.json @@ -1,6 +1,6 @@ { "name": "data-lit-todo", - "version": "0.9.89", + "version": "0.9.90", "description": "Todo application - Lit web components with @adobe/data ECS", "type": "module", "private": true, diff --git a/packages/data-lit-todo/src/features/assign/ecs/assign.test.ts b/packages/data-lit-todo/src/features/assign/services/main-service/assign.test.ts similarity index 95% rename from packages/data-lit-todo/src/features/assign/ecs/assign.test.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/assign.test.ts index 858569ce..8f920689 100644 --- a/packages/data-lit-todo/src/features/assign/ecs/assign.test.ts +++ b/packages/data-lit-todo/src/features/assign/services/main-service/assign.test.ts @@ -6,8 +6,8 @@ // then the two indexes are checked for correct many-to-many navigation. import { describe, it, expect } from "vitest"; import { Database } from "@adobe/data/ecs"; -import type { User } from "../data/user/user.js"; -import { ActionDatabase } from "../../main/ecs/action-database/action-database.js"; +import type { User } from "../../data/user/user.js"; +import { ActionDatabase } from "../../../main/services/main-service/action-database/action-database.js"; import { ComputedDatabase } from "./computed-database/computed-database.js"; // main DB + lazy feature extend (the runtime shape a feature element produces). diff --git a/packages/data-lit-todo/src/features/assign/ecs/computed-database/computed-database.ts b/packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/computed-database/computed-database.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed-database.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/computed-database/computed/index.ts b/packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/computed-database/computed/index.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed/index.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/computed-database/computed/tasks-by-user.ts b/packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed/tasks-by-user.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/computed-database/computed/tasks-by-user.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed/tasks-by-user.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/computed-database/computed/users.ts b/packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed/users.ts similarity index 94% rename from packages/data-lit-todo/src/features/assign/ecs/computed-database/computed/users.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed/users.ts index 54ef8fa6..e1ac3563 100644 --- a/packages/data-lit-todo/src/features/assign/ecs/computed-database/computed/users.ts +++ b/packages/data-lit-todo/src/features/assign/services/main-service/computed-database/computed/users.ts @@ -2,7 +2,7 @@ import { cached } from "@adobe/data/cache"; import { compare } from "@adobe/data/functions"; import { Observe } from "@adobe/data/observe"; -import type { User } from "../../../data/user/user.js"; +import type { User } from "../../../../data/user/user.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; // All users, sorted by name. Feeds both the dropdown (pick a user) and the diff --git a/packages/data-lit-todo/src/features/assign/ecs/core-database/archetypes.ts b/packages/data-lit-todo/src/features/assign/services/main-service/core-database/archetypes.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/core-database/archetypes.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/core-database/archetypes.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/core-database/components.ts b/packages/data-lit-todo/src/features/assign/services/main-service/core-database/components.ts similarity index 76% rename from packages/data-lit-todo/src/features/assign/ecs/core-database/components.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/core-database/components.ts index 019ce34d..a087846b 100644 --- a/packages/data-lit-todo/src/features/assign/ecs/core-database/components.ts +++ b/packages/data-lit-todo/src/features/assign/services/main-service/core-database/components.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; import { True } from "@adobe/data/schema"; -import { Name } from "../../../main/data/name/name.js"; -import { Assignees } from "../../../main/data/assignees/assignees.js"; +import { Name } from "../../../../main/data/name/name.js"; +import { Assignees } from "../../../../main/data/assignees/assignees.js"; export const components = Database.components({ document: { diff --git a/packages/data-lit-todo/src/features/assign/ecs/core-database/core-database.ts b/packages/data-lit-todo/src/features/assign/services/main-service/core-database/core-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/core-database/core-database.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/core-database/core-database.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/index-database/index-database.ts b/packages/data-lit-todo/src/features/assign/services/main-service/index-database/index-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/index-database/index-database.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/index-database/index-database.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/index-database/indexes/index.ts b/packages/data-lit-todo/src/features/assign/services/main-service/index-database/indexes/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/index-database/indexes/index.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/index-database/indexes/index.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/index-database/indexes/todos-by-assignee.ts b/packages/data-lit-todo/src/features/assign/services/main-service/index-database/indexes/todos-by-assignee.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/index-database/indexes/todos-by-assignee.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/index-database/indexes/todos-by-assignee.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/index-database/indexes/users-by-name.ts b/packages/data-lit-todo/src/features/assign/services/main-service/index-database/indexes/users-by-name.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/index-database/indexes/users-by-name.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/index-database/indexes/users-by-name.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/transaction-database/transaction-database.ts b/packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transaction-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/transaction-database/transaction-database.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transaction-database.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/add-user.ts b/packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/add-user.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/add-user.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/add-user.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/assign-user.ts b/packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/assign-user.ts similarity index 90% rename from packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/assign-user.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/assign-user.ts index 36b17583..dccc8eb3 100644 --- a/packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/assign-user.ts +++ b/packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/assign-user.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import type { Entity } from "@adobe/data/ecs"; -import { Assignment } from "../../../data/assignment/assignment.js"; +import { Assignment } from "../../../../data/assignment/assignment.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Assign a user (by name) to a todo. Applies the pure `Assignment.assign` diff --git a/packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/index.ts b/packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/index.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/index.ts diff --git a/packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/unassign-user.ts b/packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/unassign-user.ts similarity index 87% rename from packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/unassign-user.ts rename to packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/unassign-user.ts index 8f15c368..803f1611 100644 --- a/packages/data-lit-todo/src/features/assign/ecs/transaction-database/transactions/unassign-user.ts +++ b/packages/data-lit-todo/src/features/assign/services/main-service/transaction-database/transactions/unassign-user.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import type { Entity } from "@adobe/data/ecs"; -import { Assignment } from "../../../data/assignment/assignment.js"; +import { Assignment } from "../../../../data/assignment/assignment.js"; import type { CoreDatabase } from "../../core-database/core-database.js"; // Remove a user (by name) from a todo's assignee list. diff --git a/packages/data-lit-todo/src/features/assign/ui/assign-element.ts b/packages/data-lit-todo/src/features/assign/ui/assign-element.ts index 730504a8..0f2f55bf 100644 --- a/packages/data-lit-todo/src/features/assign/ui/assign-element.ts +++ b/packages/data-lit-todo/src/features/assign/ui/assign-element.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { DatabaseElement } from "@adobe/data-lit"; -import { ComputedDatabase } from "../ecs/computed-database/computed-database.js"; +import { ComputedDatabase } from "../services/main-service/computed-database/computed-database.js"; /** * Base class for the assign feature's elements. Typed on the feature's own diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/action-database.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/action-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/action-database.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/action-database.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/add-random-todo.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/add-random-todo.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/add-random-todo.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/add-random-todo.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/create-bulk-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/create-bulk-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/create-bulk-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/create-bulk-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/create-todo.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/create-todo.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/create-todo.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/create-todo.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/delete-all-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/delete-all-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/delete-all-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/delete-all-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/delete-todo.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/delete-todo.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/delete-todo.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/delete-todo.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/index.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/index.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/index.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/toggle-complete.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/toggle-complete.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/toggle-complete.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/toggle-complete.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/action-database/actions/toggle-display-completed.ts b/packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/toggle-display-completed.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/action-database/actions/toggle-display-completed.ts rename to packages/data-lit-todo/src/features/main/services/main-service/action-database/actions/toggle-display-completed.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed-database.ts b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/computed-database/computed-database.ts rename to packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed-database.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed/all-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/all-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/computed-database/computed/all-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/all-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed/complete-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/complete-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/computed-database/computed/complete-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/complete-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed/incomplete-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/incomplete-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/computed-database/computed/incomplete-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/incomplete-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed/index.ts b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/computed-database/computed/index.ts rename to packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/index.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed/state.ts b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/state.ts similarity index 94% rename from packages/data-lit-todo/src/features/main/ecs/computed-database/computed/state.ts rename to packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/state.ts index a512513b..b7d8b52f 100644 --- a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed/state.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/state.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { cached } from "@adobe/data/cache"; import { Observe } from "@adobe/data/observe"; -import type { State } from "../../../data/state/state.js"; +import type { State } from "../../../../data/state/state.js"; import type { IndexDatabase } from "../../index-database/index-database.js"; // The full logical `State` projected from the ECS — the conformance anchor diff --git a/packages/data-lit-todo/src/features/main/ecs/computed-database/computed/visible-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/visible-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/computed-database/computed/visible-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/computed-database/computed/visible-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/conformance/create-store.ts b/packages/data-lit-todo/src/features/main/services/main-service/conformance/create-store.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/conformance/create-store.ts rename to packages/data-lit-todo/src/features/main/services/main-service/conformance/create-store.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/conformance/expect-conforms.ts b/packages/data-lit-todo/src/features/main/services/main-service/conformance/expect-conforms.ts similarity index 92% rename from packages/data-lit-todo/src/features/main/ecs/conformance/expect-conforms.ts rename to packages/data-lit-todo/src/features/main/services/main-service/conformance/expect-conforms.ts index 2261c1e1..c2b0ca38 100644 --- a/packages/data-lit-todo/src/features/main/ecs/conformance/expect-conforms.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/conformance/expect-conforms.ts @@ -1,9 +1,9 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { it } from "vitest"; import { Entity } from "@adobe/data/ecs"; -import type { State } from "../../data/state/state.js"; -import type { ConformanceCase } from "../../data/state/conformance-case.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import type { State } from "../../../data/state/state.js"; +import type { ConformanceCase } from "../../../data/state/conformance-case.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; import type { CoreDatabase } from "../core-database/core-database.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/conformance/expect-state-matches-ignoring-ids.ts b/packages/data-lit-todo/src/features/main/services/main-service/conformance/expect-state-matches-ignoring-ids.ts similarity index 86% rename from packages/data-lit-todo/src/features/main/ecs/conformance/expect-state-matches-ignoring-ids.ts rename to packages/data-lit-todo/src/features/main/services/main-service/conformance/expect-state-matches-ignoring-ids.ts index 85473ad0..5ef1da1d 100644 --- a/packages/data-lit-todo/src/features/main/ecs/conformance/expect-state-matches-ignoring-ids.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/conformance/expect-state-matches-ignoring-ids.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; -import { expectStateMatches } from "../../data/state/expect-state-matches.js"; +import type { State } from "../../../data/state/state.js"; +import { expectStateMatches } from "../../../data/state/expect-state-matches.js"; // Like `expectStateMatches`, but compares todos without regard to their `id`. // The ecs projects each todo's entity id — drawn from its own quadrant-encoded diff --git a/packages/data-lit-todo/src/features/main/ecs/conformance/from-state.ts b/packages/data-lit-todo/src/features/main/services/main-service/conformance/from-state.ts similarity index 96% rename from packages/data-lit-todo/src/features/main/ecs/conformance/from-state.ts rename to packages/data-lit-todo/src/features/main/services/main-service/conformance/from-state.ts index 948e4d6b..f7e15a3c 100644 --- a/packages/data-lit-todo/src/features/main/ecs/conformance/from-state.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/conformance/from-state.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import type { Entity } from "@adobe/data/ecs"; -import type { State } from "../../data/state/state.js"; +import type { State } from "../../../data/state/state.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Seed a store to exactly match a `data/` `State`: clear every todo, set the diff --git a/packages/data-lit-todo/src/features/main/ecs/conformance/projection.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/conformance/projection.test.ts similarity index 96% rename from packages/data-lit-todo/src/features/main/ecs/conformance/projection.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/conformance/projection.test.ts index 200d9b93..48bce4e8 100644 --- a/packages/data-lit-todo/src/features/main/ecs/conformance/projection.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/conformance/projection.test.ts @@ -6,7 +6,7 @@ // identity test — `toState(fromState(s)) ≡ s` over representative states — // proves the projection round-trips faithfully on its own. import { describe, it } from "vitest"; -import type { State } from "../../data/state/state.js"; +import type { State } from "../../../data/state/state.js"; import { expectStateMatchesIgnoringIds } from "./expect-state-matches-ignoring-ids.js"; import { createStore } from "./create-store.js"; import { fromState } from "./from-state.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/conformance/to-state.ts b/packages/data-lit-todo/src/features/main/services/main-service/conformance/to-state.ts similarity index 91% rename from packages/data-lit-todo/src/features/main/ecs/conformance/to-state.ts rename to packages/data-lit-todo/src/features/main/services/main-service/conformance/to-state.ts index b267d9ea..6c0e68ac 100644 --- a/packages/data-lit-todo/src/features/main/ecs/conformance/to-state.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/conformance/to-state.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. -import type { State } from "../../data/state/state.js"; -import type { Todo } from "../../data/todo/todo.js"; +import type { State } from "../../../data/state/state.js"; +import type { Todo } from "../../../data/todo/todo.js"; import type { CoreDatabase } from "../core-database/core-database.js"; // Read a store back into a `data/` `State` — the inverse of `fromState`. Todos diff --git a/packages/data-lit-todo/src/features/main/ecs/core-database/archetypes.ts b/packages/data-lit-todo/src/features/main/services/main-service/core-database/archetypes.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/core-database/archetypes.ts rename to packages/data-lit-todo/src/features/main/services/main-service/core-database/archetypes.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/core-database/components.ts b/packages/data-lit-todo/src/features/main/services/main-service/core-database/components.ts similarity index 73% rename from packages/data-lit-todo/src/features/main/ecs/core-database/components.ts rename to packages/data-lit-todo/src/features/main/services/main-service/core-database/components.ts index a764f6d2..4c1a0f75 100644 --- a/packages/data-lit-todo/src/features/main/ecs/core-database/components.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/core-database/components.ts @@ -1,9 +1,9 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; import { Boolean, F32, True } from "@adobe/data/schema"; -import { Name } from "../../data/name/name.js"; -import { Assignees } from "../../data/assignees/assignees.js"; -import { DragPosition } from "../../data/drag-position/drag-position.js"; +import { Name } from "../../../data/name/name.js"; +import { Assignees } from "../../../data/assignees/assignees.js"; +import { DragPosition } from "../../../data/drag-position/drag-position.js"; export const components = Database.components({ document: { diff --git a/packages/data-lit-todo/src/features/main/ecs/core-database/core-database.ts b/packages/data-lit-todo/src/features/main/services/main-service/core-database/core-database.ts similarity index 90% rename from packages/data-lit-todo/src/features/main/ecs/core-database/core-database.ts rename to packages/data-lit-todo/src/features/main/services/main-service/core-database/core-database.ts index 223f0439..e9a8d1c1 100644 --- a/packages/data-lit-todo/src/features/main/ecs/core-database/core-database.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/core-database/core-database.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; import type { Store } from "@adobe/data/ecs"; -import { CoreDatabase as AssignSchema } from "../../../assign/ecs/core-database/core-database.js"; +import { CoreDatabase as AssignSchema } from "../../../../assign/services/main-service/core-database/core-database.js"; import { components } from "./components.js"; import { resources } from "./resources.js"; import { archetypes } from "./archetypes.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/core-database/resources.ts b/packages/data-lit-todo/src/features/main/services/main-service/core-database/resources.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/core-database/resources.ts rename to packages/data-lit-todo/src/features/main/services/main-service/core-database/resources.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/feature-database.ts b/packages/data-lit-todo/src/features/main/services/main-service/feature-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/feature-database.ts rename to packages/data-lit-todo/src/features/main/services/main-service/feature-database.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/index-database/index-database.ts b/packages/data-lit-todo/src/features/main/services/main-service/index-database/index-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/index-database/index-database.ts rename to packages/data-lit-todo/src/features/main/services/main-service/index-database/index-database.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/index-database/indexes/by-complete.ts b/packages/data-lit-todo/src/features/main/services/main-service/index-database/indexes/by-complete.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/index-database/indexes/by-complete.ts rename to packages/data-lit-todo/src/features/main/services/main-service/index-database/indexes/by-complete.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/index-database/indexes/index.ts b/packages/data-lit-todo/src/features/main/services/main-service/index-database/indexes/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/index-database/indexes/index.ts rename to packages/data-lit-todo/src/features/main/services/main-service/index-database/indexes/index.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/service-database/service-database.ts b/packages/data-lit-todo/src/features/main/services/main-service/service-database/service-database.ts similarity index 81% rename from packages/data-lit-todo/src/features/main/ecs/service-database/service-database.ts rename to packages/data-lit-todo/src/features/main/services/main-service/service-database/service-database.ts index 79f12c03..31f52ab8 100644 --- a/packages/data-lit-todo/src/features/main/ecs/service-database/service-database.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/service-database/service-database.ts @@ -1,8 +1,8 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { Database } from "@adobe/data/ecs"; import { ComputedDatabase } from "../computed-database/computed-database.js"; -import { NameGeneratorService } from "../../services/name-generator-service/name-generator-service.js"; -import { TodoAnalyticsService } from "../../services/todo-analytics-service/todo-analytics-service.js"; +import { NameGeneratorService } from "../../name-generator-service/name-generator-service.js"; +import { TodoAnalyticsService } from "../../todo-analytics-service/todo-analytics-service.js"; // These services are async ports with no ECS state to bind, so they are // registered directly from their `services/` contracts. A service that reads diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transaction-database.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transaction-database.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transaction-database.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transaction-database.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-bulk-todos.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-bulk-todos.test.ts similarity index 81% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-bulk-todos.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-bulk-todos.test.ts index 467c7a0c..f9e62795 100644 --- a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-bulk-todos.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-bulk-todos.test.ts @@ -3,8 +3,8 @@ // `createBulkTodos` conforms to `State.createBulkTodos`: it appends `count` // (floored, clamped at 0) numbered placeholder todos after the existing ones. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/create-bulk-todos.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/create-bulk-todos.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { createBulkTodos } from "./create-bulk-todos.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-bulk-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-bulk-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-bulk-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-bulk-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-todo.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-todo.test.ts similarity index 80% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-todo.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-todo.test.ts index 3a7eff9e..80ff7669 100644 --- a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-todo.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-todo.test.ts @@ -3,8 +3,8 @@ // `createTodo` conforms to `State.createTodo`: it appends one todo with the next // order and the defaulted `complete` flag, leaving existing todos untouched. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/create-todo.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/create-todo.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { createTodo } from "./create-todo.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-todo.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-todo.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/create-todo.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/create-todo.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-all-todos.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-all-todos.test.ts similarity index 79% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-all-todos.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-all-todos.test.ts index a9462113..6c7b670a 100644 --- a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-all-todos.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-all-todos.test.ts @@ -3,8 +3,8 @@ // `deleteAllTodos` conforms to `State.deleteAllTodos`: it clears every todo, // leaving `displayCompleted` untouched. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/delete-all-todos.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/delete-all-todos.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { deleteAllTodos } from "./delete-all-todos.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-all-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-all-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-all-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-all-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-todo.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-todo.test.ts similarity index 83% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-todo.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-todo.test.ts index c0af300e..651ffcad 100644 --- a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-todo.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-todo.test.ts @@ -4,8 +4,8 @@ // is a no-op for an unknown id. The spec `id` is the seeded entity id (see // `fromState`), so `apply` passes it straight through. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/delete-todo.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/delete-todo.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { deleteTodo } from "./delete-todo.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-todo.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-todo.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/delete-todo.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/delete-todo.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/drag-todo.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/drag-todo.test.ts similarity index 88% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/drag-todo.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/drag-todo.test.ts index 334a9f32..18bb3ab3 100644 --- a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/drag-todo.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/drag-todo.test.ts @@ -7,8 +7,8 @@ // equals the full list `reorderTodo` indexes — `finalIndex` maps to `toIndex`. // The spec `id` is the seeded entity id (see `fromState`), passed as `entity`. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/reorder-todo.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/reorder-todo.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { dragTodo } from "./drag-todo.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/drag-todo.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/drag-todo.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/drag-todo.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/drag-todo.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/index.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/index.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/index.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/index.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/index.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/index.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/index.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/next-order.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/next-order.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/next-order.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/next-order.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/normalize-order.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/normalize-order.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/normalize-order.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/normalize-order.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/select-ordered-todos.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/select-ordered-todos.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/order/select-ordered-todos.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/order/select-ordered-todos.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-complete.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-complete.test.ts similarity index 83% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-complete.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-complete.test.ts index 1acb6b47..217e9e6c 100644 --- a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-complete.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-complete.test.ts @@ -4,8 +4,8 @@ // addressed todo's `complete` flag and is a no-op for an unknown id. The spec // `id` is the seeded entity id (see `fromState`), passed straight through. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/toggle-complete.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/toggle-complete.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { toggleComplete } from "./toggle-complete.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-complete.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-complete.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-complete.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-complete.ts diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-display-completed.test.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-display-completed.test.ts similarity index 81% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-display-completed.test.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-display-completed.test.ts index 3b4fde2e..20ca4ce1 100644 --- a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-display-completed.test.ts +++ b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-display-completed.test.ts @@ -3,8 +3,8 @@ // `toggleDisplayCompleted` conforms to `State.toggleDisplayCompleted`: it flips // the `displayCompleted` resource, leaving the todos untouched. import { describe } from "vitest"; -import { State } from "../../../data/state/state.js"; -import { cases } from "../../../data/state/toggle-display-completed.cases.js"; +import { State } from "../../../../data/state/state.js"; +import { cases } from "../../../../data/state/toggle-display-completed.cases.js"; import { expectConforms } from "../../conformance/expect-conforms.js"; import { toggleDisplayCompleted } from "./toggle-display-completed.js"; diff --git a/packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-display-completed.ts b/packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-display-completed.ts similarity index 100% rename from packages/data-lit-todo/src/features/main/ecs/transaction-database/transactions/toggle-display-completed.ts rename to packages/data-lit-todo/src/features/main/services/main-service/transaction-database/transactions/toggle-display-completed.ts diff --git a/packages/data-lit-todo/src/features/main/ui/todo-app/todo-app.ts b/packages/data-lit-todo/src/features/main/ui/todo-app/todo-app.ts index 65df4aac..238bb9fa 100644 --- a/packages/data-lit-todo/src/features/main/ui/todo-app/todo-app.ts +++ b/packages/data-lit-todo/src/features/main/ui/todo-app/todo-app.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { html, type TemplateResult } from "lit"; import type { Database } from "@adobe/data/ecs"; -import type { FeatureDatabase } from "../../ecs/feature-database.js"; +import type { FeatureDatabase } from "../../services/main-service/feature-database.js"; type TodoService = Database.Plugin.ToDatabase; diff --git a/packages/data-lit-todo/src/features/main/ui/todo-element.ts b/packages/data-lit-todo/src/features/main/ui/todo-element.ts index 7ce76346..f6df6757 100644 --- a/packages/data-lit-todo/src/features/main/ui/todo-element.ts +++ b/packages/data-lit-todo/src/features/main/ui/todo-element.ts @@ -1,6 +1,6 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { DatabaseElement } from "@adobe/data-lit"; -import { FeatureDatabase } from "../ecs/feature-database.js"; +import { FeatureDatabase } from "../services/main-service/feature-database.js"; /** * Base class for all todo elements. Typed on the assembled `FeatureDatabase` diff --git a/packages/data-lit-todo/src/features/main/ui/todo-row/todo-row-element.ts b/packages/data-lit-todo/src/features/main/ui/todo-row/todo-row-element.ts index 476fe0e9..e5bd82f7 100644 --- a/packages/data-lit-todo/src/features/main/ui/todo-row/todo-row-element.ts +++ b/packages/data-lit-todo/src/features/main/ui/todo-row/todo-row-element.ts @@ -5,7 +5,7 @@ import { useObservableValues, useState, useDragTransaction } from "@adobe/data-l import { TodoElement } from "../todo-element.js"; import { styles } from "./todo-row.css.js"; import { TODO_ROW_HEIGHT } from "./todo-row.constants.js"; -import type { dragTodo } from "../../ecs/transaction-database/transactions/drag-todo.js"; +import type { dragTodo } from "../../services/main-service/transaction-database/transactions/drag-todo.js"; import * as presentation from "./todo-row-presentation.js"; // The transaction owns this shape and doesn't export it; infer it from the diff --git a/packages/data-lit-todo/src/index.ts b/packages/data-lit-todo/src/index.ts index 367bf2e1..e6541cc9 100644 --- a/packages/data-lit-todo/src/index.ts +++ b/packages/data-lit-todo/src/index.ts @@ -2,7 +2,7 @@ // // Library entry point for data-lit-todo. -export { FeatureDatabase as TodoDatabase } from "./features/main/ecs/feature-database.js"; +export { FeatureDatabase as TodoDatabase } from "./features/main/services/main-service/feature-database.js"; export { TodoElement } from "./features/main/ui/todo-element.js"; export { TodoApp } from "./features/main/ui/todo-app/todo-app.js"; export { Todo } from "./features/main/data/todo/todo.js"; diff --git a/packages/data-lit-todo/src/main.ts b/packages/data-lit-todo/src/main.ts index 6af328f1..49e58695 100644 --- a/packages/data-lit-todo/src/main.ts +++ b/packages/data-lit-todo/src/main.ts @@ -1,7 +1,7 @@ // © 2026 Adobe. MIT License. See /LICENSE for details. import { html, render } from "lit"; import { Database } from "@adobe/data/ecs"; -import { FeatureDatabase } from "./features/main/ecs/feature-database.js"; +import { FeatureDatabase } from "./features/main/services/main-service/feature-database.js"; import { TodoApp } from "./features/main/ui/todo-app/todo-app.js"; // Spectrum 2 theme registration (side-effect imports). diff --git a/packages/data-lit/package.json b/packages/data-lit/package.json index 7cc4bfae..7d3b206a 100644 --- a/packages/data-lit/package.json +++ b/packages/data-lit/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data-lit", - "version": "0.9.89", + "version": "0.9.90", "description": "Adobe data Lit bindings - hooks, elements, decorators", "type": "module", "private": false, diff --git a/packages/data-p2p-tictactoe/package.json b/packages/data-p2p-tictactoe/package.json index 65be93fd..bfda1ae6 100644 --- a/packages/data-p2p-tictactoe/package.json +++ b/packages/data-p2p-tictactoe/package.json @@ -1,6 +1,6 @@ { "name": "data-p2p-tictactoe", - "version": "0.9.89", + "version": "0.9.90", "description": "Serverless P2P tic-tac-toe — WebRTC DataChannel + @adobe/data-sync", "type": "module", "private": true, diff --git a/packages/data-persistence/package.json b/packages/data-persistence/package.json index bc975fbc..bae24874 100644 --- a/packages/data-persistence/package.json +++ b/packages/data-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data-persistence", - "version": "0.9.89", + "version": "0.9.90", "description": "Worker-based incremental persistence layer for @adobe/data ECS over OPFS (browser) and node:fs (server).", "type": "module", "sideEffects": false, diff --git a/packages/data-react-hello/package.json b/packages/data-react-hello/package.json index dcdd01f7..0f984f8f 100644 --- a/packages/data-react-hello/package.json +++ b/packages/data-react-hello/package.json @@ -1,6 +1,6 @@ { "name": "data-react-hello", - "version": "0.9.89", + "version": "0.9.90", "description": "Hello World sample - click counter using @adobe/data-react", "type": "module", "private": true, diff --git a/packages/data-react-pixie/package.json b/packages/data-react-pixie/package.json index 05607522..acc79972 100644 --- a/packages/data-react-pixie/package.json +++ b/packages/data-react-pixie/package.json @@ -1,6 +1,6 @@ { "name": "data-react-pixie", - "version": "0.9.89", + "version": "0.9.90", "description": "PixiJS React sample - ECS sprites (bunny, fox) with @adobe/data-react", "type": "module", "private": true, diff --git a/packages/data-react/package.json b/packages/data-react/package.json index 3c7273a9..5ac4efbb 100644 --- a/packages/data-react/package.json +++ b/packages/data-react/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data-react", - "version": "0.9.89", + "version": "0.9.90", "description": "Adobe data React bindings — hooks and context for ECS database", "type": "module", "private": false, diff --git a/packages/data-solid-dashboard/package.json b/packages/data-solid-dashboard/package.json index 4057a037..aef11c50 100644 --- a/packages/data-solid-dashboard/package.json +++ b/packages/data-solid-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "data-solid-dashboard", - "version": "0.9.89", + "version": "0.9.90", "description": "Mini dashboard sample — multiple components sharing one @adobe/data ECS database with SolidJS", "type": "module", "private": true, diff --git a/packages/data-solid/package.json b/packages/data-solid/package.json index a9be58ad..7de1f7df 100644 --- a/packages/data-solid/package.json +++ b/packages/data-solid/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data-solid", - "version": "0.9.89", + "version": "0.9.90", "description": "Adobe data SolidJS bindings — context and provider for ECS database", "type": "module", "private": false, diff --git a/packages/data-sync/package.json b/packages/data-sync/package.json index 6f6dfd04..5a563b76 100644 --- a/packages/data-sync/package.json +++ b/packages/data-sync/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data-sync", - "version": "0.9.89", + "version": "0.9.90", "description": "Multi-user real-time synchronisation for @adobe/data ECS — server, client, and in-process loopback.", "type": "module", "sideEffects": false, diff --git a/packages/data/AGENTS.md b/packages/data/AGENTS.md index 526a6711..b3eba617 100644 --- a/packages/data/AGENTS.md +++ b/packages/data/AGENTS.md @@ -8,6 +8,7 @@ Source for peer packages and sample apps is included under `references/` (when p - **references/data-lit** — Support functions for Lit based projects. - **references/data-lit-tictactoe** — **Exemplary types and state.** Tic-Tac-Toe sample with Lit UI. The `types/` (BoardState namespace, PlayMoveArgs, etc.) and `state/` (tictactoe-plugin, agent-plugin) are a very good reference for proper type namespaces, ECS resources, computed observables, and transactions — even for consumers not using Lit. +- **references/data-lit-todo** — Multi-feature Lit sample: a base feature plus a lazily-loaded peer feature and capability services. The most complete reference for the feature-folder layout (`data/`, `services/main-service/`, `ui/`), `imports`-based feature composition, indexes, and conformance tests. - **references/data-react** — Support functions for React based projects. - **references/data-react-hello** — Very simple react hello world sample. - **references/data-react-pixie** — Simple sample for react pixie based 2d games. diff --git a/packages/data/package.json b/packages/data/package.json index 54be5d24..b3a7cedb 100644 --- a/packages/data/package.json +++ b/packages/data/package.json @@ -1,6 +1,6 @@ { "name": "@adobe/data", - "version": "0.9.89", + "version": "0.9.90", "description": "Adobe data oriented programming library", "type": "module", "sideEffects": false, diff --git a/packages/data/scripts/copy-references.js b/packages/data/scripts/copy-references.js index f571a792..7a7c09a6 100644 --- a/packages/data/scripts/copy-references.js +++ b/packages/data/scripts/copy-references.js @@ -14,6 +14,7 @@ const packagesDir = path.join(packageRoot, ".."); const PACKAGES = [ "data-lit", "data-lit-tictactoe", + "data-lit-todo", "data-react", "data-react-hello", "data-react-pixie",