@operato/twin-kernel 0.7.85 → 0.7.86

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.
@@ -679,7 +679,9 @@ export class EmsKernel extends FlowEngine {
679
679
  boundary,
680
680
  subject: subj.subject,
681
681
  subjectBasis: subj.basis
682
- }, periodFactId(this.tenantId, ENERGY_EVENT.generationPeriod, subj.subject, periodStart, periodEnd));
682
+ }, periodFactId(this.tenantId, ENERGY_EVENT.generationPeriod, subj.subject, periodStart, periodEnd),
683
+ /* 이 사실이 성립한 것은 기간의 끝이다 — 우리가 계산한 시각이 아니다. */
684
+ periodEnd);
683
685
  eq.generatedKWhLastPeriod = total;
684
686
  eq.generatedKWhLastPeriodEnd = new Date(endMs).toISOString();
685
687
  /* 상태만 읽는 화면이 덜 잰 값을 온전한 값으로 읽지 않게, 관측 구간을 함께 남긴다. */
@@ -1291,8 +1291,15 @@ export declare abstract class FlowEngine implements TwinKernel {
1291
1291
  * 커넥터가 지난 기록으로도 보내면, 순번 이름으로는 그 둘이 다른 사실이 되어 **발전량이 두 배로**
1292
1292
  * 잡힌다. 유입 문은 이미 내용으로 이름을 짓고 있었는데(§`periodFactId`) 커널 자신만 아니었다 —
1293
1293
  * 한 종류에 규칙이 두 벌이었다.
1294
+ *
1295
+ * ── 시각도 내용에서 온다 ─────────────────────────────────────────────────
1296
+ * `emitOp` 은 **지금**을 찍는다. 마감된 구간에 그것을 찍으면 「우리가 언제 계산했나」가 되고, 재기동이
1297
+ * 늦으면 어제의 사실이 오늘 시각을 갖는다. 실제로 그렇게 났다 — 부팅에서 닫힌 8월 29일치가 22:24 를
1298
+ * 달고 나왔고, 시각 구간으로 읽는 중복 판정이 그것을 못 봐서 같은 하루가 12줄이 되었다(이름은 6개).
1299
+ *
1300
+ * 이 사실이 성립하는 것은 **기간의 끝**이다. 유입 문도 그 시각을 찍는다.
1294
1301
  */
1295
- protected emitPeriodFact(eventType: string, data: unknown, eventId: string): void;
1302
+ protected emitPeriodFact(eventType: string, data: unknown, eventId: string, eventTime: string): void;
1296
1303
  /**
1297
1304
  * 이 트윈의 **범위 이름** — 선언된 정체성이 없을 때 이름표가 어디까지 통하는지(§`SubjectBasis`).
1298
1305
  *
@@ -2798,10 +2798,17 @@ export class FlowEngine {
2798
2798
  * 커넥터가 지난 기록으로도 보내면, 순번 이름으로는 그 둘이 다른 사실이 되어 **발전량이 두 배로**
2799
2799
  * 잡힌다. 유입 문은 이미 내용으로 이름을 짓고 있었는데(§`periodFactId`) 커널 자신만 아니었다 —
2800
2800
  * 한 종류에 규칙이 두 벌이었다.
2801
+ *
2802
+ * ── 시각도 내용에서 온다 ─────────────────────────────────────────────────
2803
+ * `emitOp` 은 **지금**을 찍는다. 마감된 구간에 그것을 찍으면 「우리가 언제 계산했나」가 되고, 재기동이
2804
+ * 늦으면 어제의 사실이 오늘 시각을 갖는다. 실제로 그렇게 났다 — 부팅에서 닫힌 8월 29일치가 22:24 를
2805
+ * 달고 나왔고, 시각 구간으로 읽는 중복 판정이 그것을 못 봐서 같은 하루가 12줄이 되었다(이름은 6개).
2806
+ *
2807
+ * 이 사실이 성립하는 것은 **기간의 끝**이다. 유입 문도 그 시각을 찍는다.
2801
2808
  */
2802
- emitPeriodFact(eventType, data, eventId) {
2809
+ emitPeriodFact(eventType, data, eventId, eventTime) {
2803
2810
  this.revision++;
2804
- const e = { eventId, eventType, eventTime: this.now(), tenantId: this.tenantId, ...(this._correlationId ? { correlationId: this._correlationId } : {}), data };
2811
+ const e = { eventId, eventType, eventTime, tenantId: this.tenantId, ...(this._correlationId ? { correlationId: this._correlationId } : {}), data };
2805
2812
  for (const h of this.handlers)
2806
2813
  h(e);
2807
2814
  }
@@ -5645,10 +5645,17 @@ var FlowEngine = class {
5645
5645
  * 커넥터가 지난 기록으로도 보내면, 순번 이름으로는 그 둘이 다른 사실이 되어 **발전량이 두 배로**
5646
5646
  * 잡힌다. 유입 문은 이미 내용으로 이름을 짓고 있었는데(§`periodFactId`) 커널 자신만 아니었다 —
5647
5647
  * 한 종류에 규칙이 두 벌이었다.
5648
+ *
5649
+ * ── 시각도 내용에서 온다 ─────────────────────────────────────────────────
5650
+ * `emitOp` 은 **지금**을 찍는다. 마감된 구간에 그것을 찍으면 「우리가 언제 계산했나」가 되고, 재기동이
5651
+ * 늦으면 어제의 사실이 오늘 시각을 갖는다. 실제로 그렇게 났다 — 부팅에서 닫힌 8월 29일치가 22:24 를
5652
+ * 달고 나왔고, 시각 구간으로 읽는 중복 판정이 그것을 못 봐서 같은 하루가 12줄이 되었다(이름은 6개).
5653
+ *
5654
+ * 이 사실이 성립하는 것은 **기간의 끝**이다. 유입 문도 그 시각을 찍는다.
5648
5655
  */
5649
- emitPeriodFact(eventType, data, eventId) {
5656
+ emitPeriodFact(eventType, data, eventId, eventTime) {
5650
5657
  this.revision++;
5651
- const e = { eventId, eventType, eventTime: this.now(), tenantId: this.tenantId, ...this._correlationId ? { correlationId: this._correlationId } : {}, data };
5658
+ const e = { eventId, eventType, eventTime, tenantId: this.tenantId, ...this._correlationId ? { correlationId: this._correlationId } : {}, data };
5652
5659
  for (const h of this.handlers) h(e);
5653
5660
  }
5654
5661
  /**
@@ -8840,7 +8847,9 @@ var EmsKernel = class extends FlowEngine {
8840
8847
  subject: subj.subject,
8841
8848
  subjectBasis: subj.basis
8842
8849
  },
8843
- periodFactId(this.tenantId, ENERGY_EVENT.generationPeriod, subj.subject, periodStart, periodEnd)
8850
+ periodFactId(this.tenantId, ENERGY_EVENT.generationPeriod, subj.subject, periodStart, periodEnd),
8851
+ /* 이 사실이 성립한 것은 기간의 끝이다 — 우리가 계산한 시각이 아니다. */
8852
+ periodEnd
8844
8853
  );
8845
8854
  eq.generatedKWhLastPeriod = total;
8846
8855
  eq.generatedKWhLastPeriodEnd = new Date(endMs).toISOString();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/twin-kernel",
3
- "version": "0.7.85",
3
+ "version": "0.7.86",
4
4
  "type": "module",
5
5
  "description": "Twin Domain Kernel — framework-agnostic, zero-dep (domain + sim + 3-channel contract). WMS/YMS/MES, EPCIS 2.0 · ISA-95.",
6
6
  "publishConfig": {