@kumbatio/energy-system 0.6.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjE,sDAAsD;IACtD,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,IAAI,IAAI,CAAA;IACb,+BAA+B;IAC/B,QAAQ,IAAI,WAAW,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IACzD,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB;AA2FD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CA0WlF"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjE,sDAAsD;IACtD,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,IAAI,IAAI,CAAA;IACb,+BAA+B;IAC/B,QAAQ,IAAI,WAAW,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IACzD,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB;AAgDD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAgXlF"}
package/dist/engine.js CHANGED
@@ -1,4 +1,5 @@
1
- import { UNPRODUCED_ORIGIN, UNPRODUCED_TIMESTAMP, createEnergyOrigin, createEnergyState, cycleEnergyLevel, isEnergyLevel, isEnergySource, } from './levels.js';
1
+ import { UNPRODUCED_ORIGIN, UNPRODUCED_TIMESTAMP, createEnergyOrigin, createEnergyState, cycleEnergyLevel, parseExternalEnergyState, } from './levels.js';
2
+ import { isPreferredEnergyState } from './reconcile.js';
2
3
  function logEngineError(message, err) {
3
4
  console.error(`[energy-system] ${message}`, err);
4
5
  }
@@ -19,47 +20,18 @@ function isSameState(a, b) {
19
20
  a.revision === b.revision &&
20
21
  a.origin === b.origin);
21
22
  }
22
- function getSourcePriority(source) {
23
- switch (source) {
24
- case 'manual':
25
- return 3;
26
- case 'scheduled':
27
- return 2;
28
- case 'inferred':
29
- return 1;
30
- }
31
- }
32
- function isPreferredExternalState(candidate, current) {
33
- if (candidate.timestamp !== current.timestamp) {
34
- return candidate.timestamp > current.timestamp;
35
- }
36
- if (candidate.revision !== current.revision) {
37
- return candidate.revision > current.revision;
38
- }
39
- if (candidate.source !== current.source) {
40
- return getSourcePriority(candidate.source) > getSourcePriority(current.source);
41
- }
42
- if (candidate.origin !== current.origin) {
43
- return candidate.origin > current.origin;
44
- }
45
- // A producer must not reuse an identity for different state. Keep a final
46
- // deterministic fallback so malformed duplicate identities still converge.
47
- if (candidate.level !== current.level) {
48
- return candidate.level > current.level;
49
- }
50
- return false;
51
- }
23
+ /**
24
+ * Validate state that arrived from outside this engine. `candidate` is typed
25
+ * as `EnergyState`, but it crossed a process, tab or storage boundary to get
26
+ * here, so nothing about its runtime shape is guaranteed — it is parsed
27
+ * against the published schema before anything else looks at it.
28
+ */
52
29
  function normalizeState(candidate, nowMs, maxFutureSkewMs) {
53
- if (!isEnergyLevel(candidate.level)) {
54
- throw new Error(`Invalid energy level from persistence: ${String(candidate.level)}`);
55
- }
56
- if (!isEnergySource(candidate.source)) {
57
- throw new Error(`Invalid energy source from persistence: ${String(candidate.source)}`);
58
- }
59
- if (candidate.timestamp - nowMs > maxFutureSkewMs) {
60
- throw new Error(`Energy state timestamp ${String(candidate.timestamp)} exceeds local clock by more than ${String(maxFutureSkewMs)}ms`);
30
+ const parsed = parseExternalEnergyState(candidate);
31
+ if (parsed.timestamp - nowMs > maxFutureSkewMs) {
32
+ throw new Error(`Energy state timestamp ${String(parsed.timestamp)} exceeds local clock by more than ${String(maxFutureSkewMs)}ms`);
61
33
  }
62
- return createEnergyState(candidate.level, candidate.source, candidate.timestamp, candidate.revision, candidate.origin);
34
+ return parsed;
63
35
  }
64
36
  export function createEnergyEngine(options = {}) {
65
37
  const { initialLevel = 100, persistence, onChange, onPersistenceError, clock, maxFutureSkewMs = DEFAULT_MAX_FUTURE_SKEW_MS, autoStart = true, } = options;
@@ -88,8 +60,14 @@ export function createEnergyEngine(options = {}) {
88
60
  * React render (which is what every provider does) stays prerender-safe. Both sentinels sort
89
61
  * below any real value, so the first persisted, observed or user-set state replaces this
90
62
  * unconditionally.
63
+ *
64
+ * The origin is ALWAYS the sentinel, never `options.originId`. SPEC.md §3.2 requires the
65
+ * untouched default to stay distinguishable from a real state, and `isUnproducedState()` tests
66
+ * exactly this pair — stamping a configured producer identity here turns "nobody has chosen
67
+ * yet" into a state that looks chosen, which reads downstream as a level set at the epoch.
68
+ * The configured identity belongs to the first state this engine actually produces.
91
69
  */
92
- let state = createEnergyState(initialLevel, 'manual', UNPRODUCED_TIMESTAMP, 0, options.originId ?? UNPRODUCED_ORIGIN);
70
+ let state = createEnergyState(initialLevel, 'manual', UNPRODUCED_TIMESTAMP, 0, UNPRODUCED_ORIGIN);
93
71
  // Version 0 is the initial in-memory state, not proof that a persistence
94
72
  // adapter has durably stored it. Starting below the version domain keeps
95
73
  // flush() honest even before the first state transition.
@@ -239,7 +217,7 @@ export function createEnergyEngine(options = {}) {
239
217
  logEngineError('Ignoring invalid observed energy state', err);
240
218
  return;
241
219
  }
242
- if (!isPreferredExternalState(normalized, state))
220
+ if (!isPreferredEnergyState(normalized, state))
243
221
  return;
244
222
  applyState(normalized);
245
223
  });
@@ -313,7 +291,7 @@ export function createEnergyEngine(options = {}) {
313
291
  }
314
292
  if (isSameState(normalized, state))
315
293
  return;
316
- if (hydrateStartVersion === stateVersion || isPreferredExternalState(normalized, state)) {
294
+ if (hydrateStartVersion === stateVersion || isPreferredEnergyState(normalized, state)) {
317
295
  applyState(normalized);
318
296
  }
319
297
  },
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAsBjE,+CAA+C;AAC/C,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AAQjE,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,kCAAkC;AAClC,MAAM,MAAM,0BAA0B,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,CAAA;AAE3E,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACrD,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAA;IAC3C,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAC5B;AAED,gDAAgD;AAChD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAA;AAEjE;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,oBAAoB,EAC9B,UAAU,EAAE,OAAO,GAClB,cAAc,CAiBhB;AAED,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;IACrD,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;CACpC;AAWD,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAC/C,uFAAuF;IACvF,QAAQ,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAA;IACjD,sDAAsD;IACtD,KAAK,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACpC,uDAAuD;IACvD,SAAS,CAAC,EAAE,aAAa,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,OAAO,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,oBAAoB,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,cAAc,CAAA;IACtF;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;IACxC,YAAY,IAAI,OAAO,CAAA;IACvB,qEAAqE;IACrE,YAAY,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACrD,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAAA;IACb;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAA;CAChB;AAQD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAkLlB"}
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AA2BjE,+CAA+C;AAC/C,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AAQjE,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,kCAAkC;AAClC,MAAM,MAAM,0BAA0B,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,CAAA;AAE3E,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACrD,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAA;IAC3C,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAC5B;AAED,gDAAgD;AAChD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAA;AAEjE;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,oBAAoB,EAC9B,UAAU,EAAE,OAAO,GAClB,cAAc,CAiBhB;AAED,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;IACrD,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;CACpC;AAWD,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAC/C,uFAAuF;IACvF,QAAQ,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAA;IACjD,sDAAsD;IACtD,KAAK,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACpC,uDAAuD;IACvD,SAAS,CAAC,EAAE,aAAa,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,OAAO,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,oBAAoB,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,cAAc,CAAA;IACtF;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;IACxC,YAAY,IAAI,OAAO,CAAA;IACvB,qEAAqE;IACrE,YAAY,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACrD,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAAA;IACb;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAA;CAChB;AAQD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CA8OlB"}
package/dist/gate.js CHANGED
@@ -9,6 +9,11 @@ import { notificationStrategy } from './strategies.js';
9
9
  * reminders that came due while suppressed): the gate NEVER silently drops a
10
10
  * notification. Anything not deliverable now is deferred and released when
11
11
  * energy rises, suppression lifts, or the gate is disposed.
12
+ *
13
+ * Its mirror image matters just as much: a notification classified when it was
14
+ * published must not be delivered under a policy that would now refuse it.
15
+ * Energy and suppression both move inside an open batch window, so every held
16
+ * intent is re-classified whenever either changes.
12
17
  */
13
18
  function logGateError(message, err) {
14
19
  console.error(`[energy-system] ${message}`, err);
@@ -80,6 +85,15 @@ export function createNotificationGate(engine, options) {
80
85
  let batch = [];
81
86
  let deferred = [];
82
87
  let batchTimer;
88
+ let batchTimerIntervalMs;
89
+ /*
90
+ * When the currently open batch window started. The window is anchored here
91
+ * rather than to the timer, so a config change that lengthens `batchInterval`
92
+ * moves the deadline relative to the *opening* of the batch instead of
93
+ * restarting the wait. Energy oscillating across a threshold would otherwise
94
+ * re-arm the timer forever and starve the batch.
95
+ */
96
+ let batchOpenedAt;
83
97
  function currentConfig() {
84
98
  return strategy.resolve(engine.getState().level);
85
99
  }
@@ -112,47 +126,94 @@ export function createNotificationGate(engine, options) {
112
126
  scheduler.clearTimeout(batchTimer);
113
127
  batchTimer = undefined;
114
128
  }
129
+ batchTimerIntervalMs = undefined;
115
130
  }
116
- function deliverBatch() {
117
- clearBatchTimer();
118
- if (batch.length === 0)
119
- return;
120
- const toDeliver = batch;
121
- batch = [];
122
- deliver(toDeliver, 'batch');
123
- }
124
- function scheduleBatch(intervalMs) {
125
- if (batchTimer !== undefined)
131
+ /**
132
+ * Arm (or re-arm) the batch timer for the interval the active config asks
133
+ * for. A window already running at that interval is left alone so its
134
+ * elapsed time survives unrelated transitions.
135
+ */
136
+ function armBatchTimer(intervalMs) {
137
+ if (batchTimer !== undefined && batchTimerIntervalMs === intervalMs)
126
138
  return;
139
+ clearBatchTimer();
140
+ batchTimerIntervalMs = intervalMs;
141
+ const dueInMs = Math.max(0, (batchOpenedAt ?? now()) + intervalMs - now());
127
142
  batchTimer = scheduler.setTimeout(() => {
128
143
  batchTimer = undefined;
144
+ batchTimerIntervalMs = undefined;
129
145
  deliverBatch();
130
- }, intervalMs);
146
+ }, dueInMs);
131
147
  }
132
148
  /**
133
- * Re-evaluate the deferred queue against the active config. Anything no
134
- * longer deferred is released immediately (not re-batched: these intents
135
- * already waited once, adding a second batch delay would compound it).
149
+ * Re-evaluate EVERYTHING the gate is holding against the config and
150
+ * suppression flag in force right now.
151
+ *
152
+ * Classification happens when an intent is published, but both energy and
153
+ * suppression move while a batch window is open. Without this pass a
154
+ * notification batched at Focus is delivered after a focus session starts,
155
+ * and one batched at Focus is surfaced at Rest with every channel disabled —
156
+ * the gate's own policy, applied to the wrong moment.
157
+ *
158
+ * Batched intents the current policy no longer admits are demoted to
159
+ * deferred; deferred intents it now admits are released immediately (not
160
+ * re-batched: they already waited once, and a second window would compound
161
+ * the delay). Nothing is dropped in either direction.
136
162
  */
137
- function releaseEligibleDeferred() {
138
- if (disposed || deferred.length === 0)
163
+ function reconcilePending() {
164
+ if (disposed)
139
165
  return;
140
166
  const config = currentConfig();
141
- const stillDeferred = [];
142
- const released = [];
143
- for (const notification of deferred) {
144
- if (resolveNotificationOutcome(config, notification.priority, suppressed) === 'deferred') {
145
- stillDeferred.push(notification);
167
+ if (batch.length > 0) {
168
+ const stillBatched = [];
169
+ for (const notification of batch) {
170
+ if (resolveNotificationOutcome(config, notification.priority, suppressed) === 'deferred') {
171
+ deferred.push(notification);
172
+ }
173
+ else {
174
+ stillBatched.push(notification);
175
+ }
146
176
  }
147
- else {
148
- released.push(notification);
177
+ batch = stillBatched;
178
+ }
179
+ const released = [];
180
+ if (deferred.length > 0) {
181
+ const stillDeferred = [];
182
+ for (const notification of deferred) {
183
+ if (resolveNotificationOutcome(config, notification.priority, suppressed) === 'deferred') {
184
+ stillDeferred.push(notification);
185
+ }
186
+ else {
187
+ released.push(notification);
188
+ }
149
189
  }
190
+ deferred = stillDeferred;
191
+ }
192
+ if (batch.length === 0) {
193
+ clearBatchTimer();
194
+ batchOpenedAt = undefined;
150
195
  }
151
- deferred = stillDeferred;
196
+ else {
197
+ armBatchTimer(config.batchInterval);
198
+ }
199
+ // Delivered last, with the queues already settled: `onDeliver` is host code
200
+ // and may publish, suppress or flush re-entrantly.
152
201
  deliver(released, 'released');
153
202
  }
203
+ function deliverBatch() {
204
+ // Flushing a window is not an override of the active policy — only of the
205
+ // wait. Anything no longer admissible leaves through `deferred` instead.
206
+ reconcilePending();
207
+ clearBatchTimer();
208
+ if (batch.length === 0)
209
+ return;
210
+ const toDeliver = batch;
211
+ batch = [];
212
+ batchOpenedAt = undefined;
213
+ deliver(toDeliver, 'batch');
214
+ }
154
215
  const unsubscribe = engine.subscribe(() => {
155
- releaseEligibleDeferred();
216
+ reconcilePending();
156
217
  });
157
218
  return {
158
219
  publish(input) {
@@ -175,8 +236,9 @@ export function createNotificationGate(engine, options) {
175
236
  deliver([notification], 'immediate');
176
237
  break;
177
238
  case 'batched':
239
+ batchOpenedAt ??= notification.createdAt;
178
240
  batch.push(notification);
179
- scheduleBatch(config.batchInterval);
241
+ armBatchTimer(config.batchInterval);
180
242
  break;
181
243
  case 'deferred':
182
244
  deferred.push(notification);
@@ -190,9 +252,9 @@ export function createNotificationGate(engine, options) {
190
252
  if (suppressed === next)
191
253
  return;
192
254
  suppressed = next;
193
- if (!suppressed) {
194
- releaseEligibleDeferred();
195
- }
255
+ // Both directions matter: entering suppression must pull an open batch
256
+ // back out of delivery, not just stop admitting new intents.
257
+ reconcilePending();
196
258
  },
197
259
  isSuppressed() {
198
260
  return suppressed;
@@ -203,8 +265,9 @@ export function createNotificationGate(engine, options) {
203
265
  flush() {
204
266
  if (disposed)
205
267
  return;
268
+ // Reconciles first, so flushing under suppression or a lower energy
269
+ // level defers the open batch rather than forcing it out.
206
270
  deliverBatch();
207
- releaseEligibleDeferred();
208
271
  },
209
272
  dispose() {
210
273
  if (disposed)
@@ -215,6 +278,7 @@ export function createNotificationGate(engine, options) {
215
278
  const pending = [...batch, ...deferred];
216
279
  batch = [];
217
280
  deferred = [];
281
+ batchOpenedAt = undefined;
218
282
  deliver(pending, 'released');
219
283
  disposed = true;
220
284
  unsubscribe();
package/dist/gate.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export { ENERGY_LEVEL_VALUES, ENERGY_PRESENCE_VALUES, ENERGY_SOURCE_VALUES } fro
3
3
  export { UNPRODUCED_ORIGIN, UNPRODUCED_TIMESTAMP, createEnergyOrigin, createEnergyState, cycleEnergyLevel, getEnergyLevel, getEnergyLevels, isEnergyLevel, isEnergySource, isHigherEnergy, isUnproducedState, } from './levels.js';
4
4
  export type { ExternalLevelCompatibility, ExternalLevelCompatibilityOptions } from './compat.js';
5
5
  export { createExternalLevelCompatibility, cycleDiscreteLevel, mapToNearestDiscreteLevel, mapToNearestEnergyLevel, } from './compat.js';
6
+ export { isPreferredEnergyState } from './reconcile.js';
6
7
  export { getEnergyMetrics } from './metrics.js';
7
8
  export type { EnergyEngine, EnergyEngineOptions } from './engine.js';
8
9
  export { createEnergyEngine } from './engine.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAG9F,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,0BAA0B,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAA;AAChG,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAG/C,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY,EACV,cAAc,EACd,4BAA4B,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,6BAA6B,EAC7B,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAGjG,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAG7F,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAG9F,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,0BAA0B,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAA;AAChG,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAG/C,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY,EACV,cAAc,EACd,4BAA4B,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,6BAA6B,EAC7B,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAGjG,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAG7F,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -2,6 +2,8 @@ export { ENERGY_LEVEL_VALUES, ENERGY_PRESENCE_VALUES, ENERGY_SOURCE_VALUES } fro
2
2
  // Level definitions and pure functions
3
3
  export { UNPRODUCED_ORIGIN, UNPRODUCED_TIMESTAMP, createEnergyOrigin, createEnergyState, cycleEnergyLevel, getEnergyLevel, getEnergyLevels, isEnergyLevel, isEnergySource, isHigherEnergy, isUnproducedState, } from './levels.js';
4
4
  export { createExternalLevelCompatibility, cycleDiscreteLevel, mapToNearestDiscreteLevel, mapToNearestEnergyLevel, } from './compat.js';
5
+ // State reconciliation (which of two states for the same user wins)
6
+ export { isPreferredEnergyState } from './reconcile.js';
5
7
  // Derived metrics
6
8
  export { getEnergyMetrics } from './metrics.js';
7
9
  export { createEnergyEngine } from './engine.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE9F,uCAAuC;AACvC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAEpB,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAI/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAUhD,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAYtB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAIjG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAanB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAc7F,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE9F,uCAAuC;AACvC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAEpB,oEAAoE;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAI/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAUhD,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAYtB,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAIjG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAanB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAc7F,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,WAAW,CAAA"}
package/dist/levels.d.ts CHANGED
@@ -19,4 +19,20 @@ export declare function isEnergySource(value: unknown): value is EnergySource;
19
19
  export declare function isHigherEnergy(a: EnergyLevel, b: EnergyLevel): boolean;
20
20
  /** Create an EnergyState for the current moment */
21
21
  export declare function createEnergyState(level: EnergyLevel, source?: EnergySource, timestamp?: number, revision?: number, origin?: string): EnergyState;
22
+ /**
23
+ * Parse a value that came from OUTSIDE this engine — persisted JSON, a
24
+ * cross-context observation, a wire message — into an `EnergyState`.
25
+ *
26
+ * This is the interchange boundary, so it enforces the published JSON Schema
27
+ * exactly rather than approximately: `additionalProperties: false` means an
28
+ * object carrying an unknown key is not an `EnergyState`, and silently
29
+ * stripping the key would let two implementations disagree about what they
30
+ * just exchanged while both believe they conformed.
31
+ *
32
+ * Throws with a specific reason; callers decide whether that is fatal or a
33
+ * discard. Not exported from the package: the boundaries that need it are all
34
+ * inside this library, and the schema is what external producers validate
35
+ * against.
36
+ */
37
+ export declare function parseExternalEnergyState(value: unknown): EnergyState;
22
38
  //# sourceMappingURL=levels.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"levels.d.ts","sourceRoot":"","sources":["../src/levels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAU/F,kFAAkF;AAClF,wBAAgB,kBAAkB,IAAI,MAAM,CAe3C;AAaD,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAC5C,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC,GAAG,OAAO,CAE3F;AAwFD,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAEhF;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAIlF;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAKlE;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAEtE;AAED,mDAAmD;AACnD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,YAAuB,EAC/B,SAAS,SAAa,EACtB,QAAQ,SAA2B,EACnC,MAAM,SAAwB,GAC7B,WAAW,CA4Bb"}
1
+ {"version":3,"file":"levels.d.ts","sourceRoot":"","sources":["../src/levels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAU/F,kFAAkF;AAClF,wBAAgB,kBAAkB,IAAI,MAAM,CAe3C;AAaD,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAC5C,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC,GAAG,OAAO,CAE3F;AAwFD,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAEhF;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAIlF;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAKlE;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAEtE;AAED,mDAAmD;AACnD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,YAAuB,EAC/B,SAAS,SAAa,EACtB,QAAQ,SAA2B,EACnC,MAAM,SAAwB,GAC7B,WAAW,CA+Bb;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CA0CpE"}
package/dist/levels.js CHANGED
@@ -156,7 +156,10 @@ export function createEnergyState(level, source = 'manual', timestamp = Date.now
156
156
  if (!isEnergySource(source)) {
157
157
  throw new Error(`Invalid energy source: ${String(source)}`);
158
158
  }
159
- if (!Number.isFinite(timestamp) || timestamp < 0) {
159
+ // Integer, matching `spec/energy-state.schema.json`. A fractional timestamp
160
+ // is not representable in the interchange format, so accepting one here
161
+ // produces a state this implementation can hold but cannot legally publish.
162
+ if (!Number.isSafeInteger(timestamp) || timestamp < 0) {
160
163
  throw new Error(`Invalid energy timestamp: ${String(timestamp)}`);
161
164
  }
162
165
  if (!Number.isSafeInteger(revision) || revision < 0) {
@@ -173,4 +176,54 @@ export function createEnergyState(level, source = 'manual', timestamp = Date.now
173
176
  origin,
174
177
  });
175
178
  }
179
+ /** The exact key set `spec/energy-state.schema.json` permits. */
180
+ const ENERGY_STATE_KEYS = ['level', 'timestamp', 'source', 'revision', 'origin'];
181
+ /**
182
+ * Parse a value that came from OUTSIDE this engine — persisted JSON, a
183
+ * cross-context observation, a wire message — into an `EnergyState`.
184
+ *
185
+ * This is the interchange boundary, so it enforces the published JSON Schema
186
+ * exactly rather than approximately: `additionalProperties: false` means an
187
+ * object carrying an unknown key is not an `EnergyState`, and silently
188
+ * stripping the key would let two implementations disagree about what they
189
+ * just exchanged while both believe they conformed.
190
+ *
191
+ * Throws with a specific reason; callers decide whether that is fatal or a
192
+ * discard. Not exported from the package: the boundaries that need it are all
193
+ * inside this library, and the schema is what external producers validate
194
+ * against.
195
+ */
196
+ export function parseExternalEnergyState(value) {
197
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
198
+ throw new Error(`Energy state must be an object, received: ${String(value)}`);
199
+ }
200
+ const keys = Object.keys(value);
201
+ const unknownKeys = keys.filter((key) => !ENERGY_STATE_KEYS.includes(key));
202
+ if (unknownKeys.length > 0) {
203
+ throw new Error(`Energy state has unknown properties: ${unknownKeys.join(', ')}`);
204
+ }
205
+ const missingKeys = ENERGY_STATE_KEYS.filter((key) => !keys.includes(key));
206
+ if (missingKeys.length > 0) {
207
+ throw new Error(`Energy state is missing properties: ${missingKeys.join(', ')}`);
208
+ }
209
+ const record = value;
210
+ if (!isEnergyLevel(record['level'])) {
211
+ throw new Error(`Invalid energy level: ${String(record['level'])}`);
212
+ }
213
+ if (!isEnergySource(record['source'])) {
214
+ throw new Error(`Invalid energy source: ${String(record['source'])}`);
215
+ }
216
+ if (typeof record['timestamp'] !== 'number') {
217
+ throw new TypeError(`Invalid energy timestamp: ${String(record['timestamp'])}`);
218
+ }
219
+ if (typeof record['revision'] !== 'number') {
220
+ throw new TypeError(`Invalid energy revision: ${String(record['revision'])}`);
221
+ }
222
+ if (typeof record['origin'] !== 'string') {
223
+ throw new TypeError(`Invalid energy origin: ${String(record['origin'])}`);
224
+ }
225
+ // Field-level invariants (integer/range/blank-origin) belong to the one
226
+ // constructor that enforces them for internally produced states too.
227
+ return createEnergyState(record['level'], record['source'], record['timestamp'], record['revision'], record['origin']);
228
+ }
176
229
  //# sourceMappingURL=levels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"levels.js","sourceRoot":"","sources":["../src/levels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"levels.js","sourceRoot":"","sources":["../src/levels.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAuDhE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,SAAiB,GAAG,iBAAiB,CA4C/E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAoC1E"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAkChE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,SAAiB,GAAG,iBAAiB,CA4C/E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAyB1E"}