|
| 1 | +--- |
| 2 | +"@loop-engine/core": major |
| 3 | +"@loop-engine/runtime": major |
| 4 | +"@loop-engine/sdk": major |
| 5 | +"@loop-engine/actors": major |
| 6 | +"@loop-engine/guards": major |
| 7 | +"@loop-engine/loop-definition": major |
| 8 | +"@loop-engine/events": major |
| 9 | +"@loop-engine/signals": major |
| 10 | +"@loop-engine/observability": major |
| 11 | +"@loop-engine/registry-client": major |
| 12 | +"@loop-engine/ui-devtools": major |
| 13 | +"@loop-engine/adapter-memory": major |
| 14 | +"@loop-engine/adapter-vercel-ai": major |
| 15 | +"@loop-engine/adapter-perplexity": major |
| 16 | +"@loop-engine/adapter-anthropic": major |
| 17 | +"@loop-engine/adapter-openai": major |
| 18 | +"@loop-engine/adapter-gemini": major |
| 19 | +"@loop-engine/adapter-grok": major |
| 20 | +"@loop-engine/adapter-http": major |
| 21 | +"@loop-engine/adapter-openclaw": major |
| 22 | +"@loop-engine/adapter-pagerduty": major |
| 23 | +"@loop-engine/adapter-commerce-gateway": major |
| 24 | +--- |
| 25 | +## SR-002 · D-11 · LoopStore collapse and rename |
| 26 | + |
| 27 | +**Interface rename + structural collapse (6 methods → 5):** |
| 28 | + |
| 29 | +- runtime interface `LoopStorageAdapter` → `LoopStore` |
| 30 | +- adapter class `MemoryLoopStorageAdapter` → `MemoryStore` |
| 31 | +- adapter factory `createMemoryLoopStorageAdapter` → `memoryStore` |
| 32 | +- adapter factory `postgresStorageAdapter` removed (consolidated into |
| 33 | + the canonical `postgresStore`) |
| 34 | +- SDK option key `storage` → `store` (both `CreateLoopSystemOptions` |
| 35 | + and the `createLoopSystem` return shape) |
| 36 | + |
| 37 | +**Method renames + collapse:** |
| 38 | + |
| 39 | +| Before | After | Operation | |
| 40 | +|---|---|---| |
| 41 | +| `getLoop` | `getInstance` | rename | |
| 42 | +| `createLoop` | `saveInstance` | collapse with `updateLoop` | |
| 43 | +| `updateLoop` | `saveInstance` | collapse with `createLoop` | |
| 44 | +| `appendTransition` | `saveTransitionRecord` | rename | |
| 45 | +| `getTransitions` | `getTransitionHistory` | rename | |
| 46 | +| `listOpenLoops` | `listOpenInstances` | rename | |
| 47 | + |
| 48 | +`createLoop` + `updateLoop` collapse into a single `saveInstance` method |
| 49 | +with upsert semantics. The `MemoryStore` adapter implements this as a |
| 50 | +single `Map.set`. The `postgresStore` adapter implements it as |
| 51 | +`INSERT ... ON CONFLICT (aggregate_id) DO UPDATE SET ...`. |
| 52 | + |
| 53 | +**Migration:** |
| 54 | + |
| 55 | +```diff |
| 56 | +- import { MemoryLoopStorageAdapter, createMemoryLoopStorageAdapter } from "@loop-engine/adapter-memory"; |
| 57 | ++ import { MemoryStore, memoryStore } from "@loop-engine/adapter-memory"; |
| 58 | + |
| 59 | +- import type { LoopStorageAdapter } from "@loop-engine/runtime"; |
| 60 | ++ import type { LoopStore } from "@loop-engine/runtime"; |
| 61 | + |
| 62 | +- const adapter = createMemoryLoopStorageAdapter(); |
| 63 | ++ const store = memoryStore(); |
| 64 | + |
| 65 | +- await createLoopSystem({ loops, storage: adapter }); |
| 66 | ++ await createLoopSystem({ loops, store }); |
| 67 | + |
| 68 | +- const { engine, storage } = await createLoopSystem({...}); |
| 69 | ++ const { engine, store } = await createLoopSystem({...}); |
| 70 | + |
| 71 | +- await storage.getLoop(aggregateId); |
| 72 | ++ await store.getInstance(aggregateId); |
| 73 | + |
| 74 | +- await storage.createLoop(instance); // or updateLoop |
| 75 | ++ await store.saveInstance(instance); |
| 76 | + |
| 77 | +- await storage.appendTransition(record); |
| 78 | ++ await store.saveTransitionRecord(record); |
| 79 | + |
| 80 | +- await storage.getTransitions(aggregateId); |
| 81 | ++ await store.getTransitionHistory(aggregateId); |
| 82 | + |
| 83 | +- await storage.listOpenLoops(loopId); |
| 84 | ++ await store.listOpenInstances(loopId); |
| 85 | +``` |
| 86 | + |
| 87 | +Custom adapters that implement the interface must update method names |
| 88 | +and collapse `createLoop` + `updateLoop` into a single `saveInstance` |
| 89 | +upsert. There is no aliasing; all consumers must migrate. |
0 commit comments