@operato/twin-kernel 0.7.90 → 0.8.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,4 +1,4 @@
1
- import type { VocabularyElement } from '@operato/operations-contract';
1
+ import type { VocabularyElement } from '@operato/ops-contract';
2
2
  /**
3
3
  * 클래스 단위 마스터 표 — 관측 리듀서가 든다.
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Command, CommandAck, ScenarioControl, StateSnapshot } from '@operato/operations-contract';
1
+ import type { Command, CommandAck, ScenarioControl, StateSnapshot } from '@operato/ops-contract';
2
2
  import { type StateDivergence } from './divergence.ts';
3
3
  /** fork·구동·행위 가능한 트윈(FlowEngine 이 만족). */
4
4
  export interface CounterfactualTwin {
@@ -1,4 +1,4 @@
1
- import type { StateSnapshot } from '@operato/operations-contract';
1
+ import type { StateSnapshot } from '@operato/ops-contract';
2
2
  export interface FieldDiff<T> {
3
3
  id: string;
4
4
  predicted: T | undefined;
@@ -5,7 +5,7 @@
5
5
  * 상태를 같은 시점에 비교해 **드리프트(모델과 현실의 이탈)** 를 탐지한다. 발산 = 이상/개입 신호.
6
6
  * (fork 로 예측 → 관측으로 실제 → 여기서 대조. execution-model.md 시뮬↔모니터링 커플링.)
7
7
  */
8
- import { itemKeyOf } from '@operato/operations-contract';
8
+ import { itemKeyOf } from '@operato/ops-contract';
9
9
  function diffBy(predicted, actual, idOf, valOf) {
10
10
  const p = new Map(predicted.map(e => [idOf(e), valOf(e)]));
11
11
  const a = new Map(actual.map(e => [idOf(e), valOf(e)]));
@@ -1,6 +1,6 @@
1
1
  import { FlowEngine } from './flow-engine.ts';
2
2
  import { type AllocationPolicy } from './allocation-policy.ts';
3
- import { type CanonicalEnvelope, type DemandWindowState, type EnergyState, type StateSnapshot, type Attention, type StructureShift, type TwinModelDef } from '@operato/operations-contract';
3
+ import { type CanonicalEnvelope, type DemandWindowState, type EnergyState, type StateSnapshot, type Attention, type StructureShift, type TwinModelDef } from '@operato/ops-contract';
4
4
  /** 수요 구간 — 요금의 알갱이다. 15분은 한국·다수 요금제의 최대수요 산정 단위다. */
5
5
  export declare const DEMAND_WINDOW_MS: number;
6
6
  /** 그 시각이 속한 구간의 시작 — 벽시계 경계(00·15·30·45분)에 맞춘다. */
@@ -27,12 +27,12 @@
27
27
  */
28
28
  import { FlowEngine } from "./flow-engine.js";
29
29
  /* 기간 사실의 이름은 유입 문과 한 규칙이다(§`periodFactId`). */
30
- import { periodFactId } from '@operato/operations-contract';
30
+ import { periodFactId } from '@operato/ops-contract';
31
31
  /* 「이 시각에 유효한가」는 커널에 규칙이 한 벌이다 — 선언 축도 그것을 쓴다. */
32
- import { effectivityAt } from '@operato/operations-contract';
32
+ import { effectivityAt } from '@operato/ops-contract';
33
33
  import { firstFitPolicy } from "./allocation-policy.js";
34
- import { CMD, ENERGY_EVENT, minuteOfDayAt, localDayIndexAt, localDayStartMs } from '@operato/operations-contract';
35
- import { EMS_PROPERTY, METER_DIRECTION, electricalUpstreamOf, generationFractionAt } from '@operato/operations-contract';
34
+ import { CMD, ENERGY_EVENT, minuteOfDayAt, localDayIndexAt, localDayStartMs } from '@operato/ops-contract';
35
+ import { EMS_PROPERTY, METER_DIRECTION, electricalUpstreamOf, generationFractionAt } from '@operato/ops-contract';
36
36
  /** 수요 구간 — 요금의 알갱이다. 15분은 한국·다수 요금제의 최대수요 산정 단위다. */
37
37
  export const DEMAND_WINDOW_MS = 15 * 60 * 1000;
38
38
  /** 그 시각이 속한 구간의 시작 — 벽시계 경계(00·15·30·45분)에 맞춘다. */
@@ -1,4 +1,4 @@
1
- import type { TwinModelDef, CanonicalEnvelope, StructureShift } from '@operato/operations-contract';
1
+ import type { TwinModelDef, CanonicalEnvelope, StructureShift } from '@operato/ops-contract';
2
2
  import { type ProjectedState, type ReducerCheckpoint } from './state-projector.ts';
3
3
  /** 저장된 기록을 처리할 것 — 도메인 커널 또는 `StateProjector`. 계약은 넷뿐이다. */
4
4
  export interface JournalProjector {
@@ -1,12 +1,12 @@
1
- import type { TestResult, ISOTime, MaterialQuantity, WorkCalendarEntry, EffectivePeriod, Effectivity, OffCalendarReason, ResourceProperty, ResourceClassDef, MaterialDefinition, Attention, TwinModelDef, CanonicalEnvelope, Command, CommandAck, EventHandler, EquipmentMotion, OeeMetrics, AssetState, GeneratorSpec, InterventionOutcome, OrderState, PersonState, ScenarioControl, ScenarioOverride, StateSnapshot, TwinKernel, Unsubscribe, LocationState, ItemState, EquipmentState, OrderStatusDelta, TaskState, TaskStatus, StructureShift, IdentityGroundingView, IdentityDeclaration, TestSpecificationCriterion, LocationObservation } from '@operato/operations-contract';
2
- import type { VocabularyElement } from '@operato/operations-contract';
1
+ import type { TestResult, ISOTime, MaterialQuantity, WorkCalendarEntry, EffectivePeriod, Effectivity, OffCalendarReason, ResourceProperty, ResourceClassDef, MaterialDefinition, Attention, TwinModelDef, CanonicalEnvelope, Command, CommandAck, EventHandler, EquipmentMotion, OeeMetrics, AssetState, GeneratorSpec, InterventionOutcome, OrderState, PersonState, ScenarioControl, ScenarioOverride, StateSnapshot, TwinKernel, Unsubscribe, LocationState, ItemState, EquipmentState, OrderStatusDelta, TaskState, TaskStatus, StructureShift, IdentityGroundingView, IdentityDeclaration, TestSpecificationCriterion, LocationObservation } from '@operato/ops-contract';
2
+ import type { VocabularyElement } from '@operato/ops-contract';
3
3
  import type { ReducerCheckpoint } from './observed-reducer.ts';
4
- import type { EpcisEvent, BizTransactionElement } from '@operato/operations-contract';
4
+ import type { EpcisEvent, BizTransactionElement } from '@operato/ops-contract';
5
5
  import type { AllocationPolicy, SlotView } from './allocation-policy.ts';
6
6
  import type { DurationEstimator, DurationContext } from './duration-estimator.ts';
7
- import type { OperationDef, IsoDuration, OpMaterialSpecification } from '@operato/operations-contract';
8
- import { type CapacityAnalysis } from '@operato/operations-contract';
9
- import { type CommittedDemand, type OperationsCapabilityReport } from '@operato/operations-contract';
7
+ import type { OperationDef, IsoDuration, OpMaterialSpecification } from '@operato/ops-contract';
8
+ import { type CapacityAnalysis } from '@operato/ops-contract';
9
+ import { type CommittedDemand, type OperationsCapabilityReport } from '@operato/ops-contract';
10
10
  export interface FlowLocation {
11
11
  id: string;
12
12
  type: string;
@@ -9,17 +9,17 @@
9
9
  * 통합 타입은 도메인 필드를 옵셔널로 넓혀(FlowItem.gtin?, FlowOrder.shipmentEpc? 등) 두 도메인을 담는다.
10
10
  * (roadmap Phase5 발견 → 추출. [[project_flow_single_base_vision]] FlowLocation 단일 base 방향과 정합.)
11
11
  */
12
- import { OP_EVENT, CMD, locationStatusOf, readBoardEquipment, readBoardLocations, readBoardAssets, classClosure, capabilityOf, requiredTestsFor, priorityRank, dueStatusOf, isOrderTerminal, effectivityAt, offCalendarAt, offCalendarReasonAt, minuteOfDayAt, activeShiftAt, subLotIdOf, itemKeyOf, identityGroundingOf, outsideLimit } from '@operato/operations-contract';
12
+ import { OP_EVENT, CMD, locationStatusOf, readBoardEquipment, readBoardLocations, readBoardAssets, classClosure, capabilityOf, requiredTestsFor, priorityRank, dueStatusOf, isOrderTerminal, effectivityAt, offCalendarAt, offCalendarReasonAt, minuteOfDayAt, activeShiftAt, subLotIdOf, itemKeyOf, identityGroundingOf, outsideLimit } from '@operato/ops-contract';
13
13
  import { ObservedReducer } from "./observed-reducer.js";
14
14
  /* 주체를 정하는 규칙은 유입 문과 한 벌이다 — 두 곳에 적으면 한쪽만 고쳐진다. */
15
- import { resolveSubject } from '@operato/operations-contract';
16
- import { transformationEvent, aggregationEvent, objectEvent, parseEpc, DISP, ILMD_ATTR, CBV_BIZSTEP, objectUri, bizTransactionUri, gdtiUri } from '@operato/operations-contract';
17
- import { OP_PARAM } from '@operato/operations-contract';
18
- import { parseIsoDuration } from '@operato/operations-contract';
19
- import { analyzeCapacity } from '@operato/operations-contract';
20
- import { operationsCapabilityOf } from '@operato/operations-contract';
15
+ import { resolveSubject } from '@operato/ops-contract';
16
+ import { transformationEvent, aggregationEvent, objectEvent, parseEpc, DISP, ILMD_ATTR, CBV_BIZSTEP, objectUri, bizTransactionUri, gdtiUri } from '@operato/ops-contract';
17
+ import { OP_PARAM } from '@operato/ops-contract';
18
+ import { parseIsoDuration } from '@operato/ops-contract';
19
+ import { analyzeCapacity } from '@operato/ops-contract';
20
+ import { operationsCapabilityOf } from '@operato/ops-contract';
21
21
  /* 에너지 상태 필드는 **능력 선언에서 뽑는다** — 손으로 적으면 능력에 필드를 더한 날 스냅샷이 빠진다. */
22
- import { stateFieldsOf } from '@operato/operations-contract';
22
+ import { stateFieldsOf } from '@operato/ops-contract';
23
23
  const BASE_EPOCH = Date.parse('2026-01-01T00:00:00Z');
24
24
  /**
25
25
  * 선언한 유효 기간만 뽑는다 — 마스터가 말하지 않으면 필드를 만들지 않는다.
@@ -1,4 +1,4 @@
1
- import type { ScenarioControl, ScenarioDef, StateSnapshot } from '@operato/operations-contract';
1
+ import type { ScenarioControl, ScenarioDef, StateSnapshot } from '@operato/ops-contract';
2
2
  /** fork·시나리오 구동 가능한 트윈(FlowEngine 이 만족). */
3
3
  export interface ForecastTwin {
4
4
  getSnapshot(): StateSnapshot;
package/dist/index.d.ts CHANGED
@@ -1,40 +1,20 @@
1
- export * from '@operato/operations-contract';
2
- export * from '@operato/operations-contract';
3
- export * from '@operato/operations-contract';
4
1
  export * from './counterfactual.ts';
5
2
  export * from './forecast.ts';
6
3
  export * from './twin-observer.ts';
7
4
  export * from './event-journal.ts';
8
- export * from '@operato/operations-contract';
9
5
  export * from './divergence.ts';
10
- export * from '@operato/operations-contract';
11
- export * from '@operato/operations-contract';
12
- export * from '@operato/operations-contract';
13
- export * from '@operato/operations-contract';
14
- export * from '@operato/operations-contract';
15
6
  export * from './allocation-policy.ts';
16
7
  export * from './duration-estimator.ts';
17
- export * from '@operato/operations-contract';
18
8
  export * from './observed-reducer.ts';
19
9
  export * from './state-projector.ts';
20
10
  export * from './task-fold.ts';
21
11
  export * from './job-response.ts';
22
- export * from '@operato/operations-contract';
23
12
  export * from './runtime.ts';
24
- export * from '@operato/operations-contract';
25
- export * from '@operato/operations-contract';
26
13
  export * from './flow-engine.ts';
27
- export * from '@operato/operations-contract';
28
- export * from '@operato/operations-contract';
29
14
  export { WmsKernel } from './kernel.ts';
30
15
  export { YmsKernel } from './yms-kernel.ts';
31
16
  export { MesKernel } from './mes-kernel.ts';
32
17
  export { EmsKernel, DEMAND_WINDOW_MS, demandWindowStart } from './ems-kernel.ts';
33
- export { ingestEnergyRecords, isEnergyRecord, ingestEnergyEquipmentRecords, isEnergyEquipmentRecord, ingestEnergyGenerationRecords, isEnergyGenerationRecord, ingestEnergyUsagePeriodRecords, isEnergyUsagePeriodRecord, ingestEnergyBillRecords, isEnergyBillRecord, ingestEnergyTariffBasisRecords, isEnergyTariffBasisRecord, ingestEnergyGenerationPriceRecords, isEnergyGenerationPriceRecord, ingestEnergyGenerationPeriodRecords, isEnergyGenerationPeriodRecord, resolveSubject, periodFactId } from '@operato/operations-contract';
34
- export { ingestOperationalRecords, isOperationalRecord, operationalKindOf } from '@operato/operations-contract';
35
- export type { OperationalKind, OperationalRecord, OperationalIngestOptions } from '@operato/operations-contract';
36
- export { attributeEnergy, electricityCost, energyIntensity, energyOfWindows } from './energy-attribution.ts';
37
- export type { AttributionBasis, AttributionResult, ElectricityCost, EnergyConsumer, EnergyPool, EnergyShare, IntensityInput, IntensityResult, IntensityDenominator, TariffDeclaration, WeightKind, WindowedEnergy } from './energy-attribution.ts';
38
- export type { EnergyRecord, EnergyEquipmentRecord, EnergyGenerationRecord, EnergyUsagePeriodRecord, EnergyBillRecord, EnergyTariffBasisRecord, EnergyGenerationPriceRecord, EnergyGenerationPeriodRecord, EnergyIngestOptions, EnergyIngestResult } from '@operato/operations-contract';
39
- export * from '@operato/operations-contract';
18
+ export * from './energy-attribution.ts';
19
+ export * from './make-to-order.ts';
40
20
  export { ClassMasterTable } from './class-master-table.ts';
package/dist/index.js CHANGED
@@ -1,39 +1,35 @@
1
- export * from '@operato/operations-contract';
2
- export * from '@operato/operations-contract';
3
- export * from '@operato/operations-contract';
1
+ /*
2
+ * 커널의 진입점 — **엔진만 내보낸다.**
3
+ *
4
+ * ── 계약을 다시 내보내지 않는다 (2026-08-30) ──────────────────────────────
5
+ * 어휘·타입·판별 함수는 `@operato/ops-contract` 에 있다. 여기서 그것을 다시 내보내면 같은 이름을
6
+ * **두 경로로** 가져올 수 있게 되고, 새 코드가 편한 쪽을 쓰면 계약이 커널 뒤에 숨는다. 그때 층은
7
+ * 이름만 남는다 — 사실을 만들기만 하는 쪽(MES · WMS · 커넥터)이 엔진을 거쳐 어휘를 얻게 된다.
8
+ *
9
+ * 처음에는 다시 내보냈다. 이유는 「소비처를 한 줄도 안 고쳐도 되게」였고, 그것은 **관리 편의**이지
10
+ * 구조의 근거가 아니었다. 세는 시험으로 덮으려 했는데, 세는 시험은 층이 깨졌다는 것을 인정하고 빚을
11
+ * 재는 도구다.
12
+ *
13
+ * 계약이 필요한 소비처는 그것을 **직접 의존한다.** 한 줄이면 된다.
14
+ */
4
15
  export * from "./counterfactual.js";
5
16
  export * from "./forecast.js";
6
17
  export * from "./twin-observer.js";
7
18
  export * from "./event-journal.js";
8
- export * from '@operato/operations-contract';
9
19
  export * from "./divergence.js";
10
- export * from '@operato/operations-contract';
11
- export * from '@operato/operations-contract';
12
- export * from '@operato/operations-contract';
13
- export * from '@operato/operations-contract';
14
- export * from '@operato/operations-contract';
15
20
  export * from "./allocation-policy.js";
16
21
  export * from "./duration-estimator.js";
17
- export * from '@operato/operations-contract';
18
22
  export * from "./observed-reducer.js";
19
23
  export * from "./state-projector.js";
20
24
  export * from "./task-fold.js";
21
25
  export * from "./job-response.js";
22
- export * from '@operato/operations-contract';
23
26
  export * from "./runtime.js";
24
- export * from '@operato/operations-contract';
25
- export * from '@operato/operations-contract';
26
27
  export * from "./flow-engine.js";
27
- export * from '@operato/operations-contract';
28
- export * from '@operato/operations-contract';
29
28
  export { WmsKernel } from "./kernel.js";
30
29
  export { YmsKernel } from "./yms-kernel.js";
31
30
  export { MesKernel } from "./mes-kernel.js";
32
31
  export { EmsKernel, DEMAND_WINDOW_MS, demandWindowStart } from "./ems-kernel.js";
33
- export { ingestEnergyRecords, isEnergyRecord, ingestEnergyEquipmentRecords, isEnergyEquipmentRecord, ingestEnergyGenerationRecords, isEnergyGenerationRecord, ingestEnergyUsagePeriodRecords, isEnergyUsagePeriodRecord, ingestEnergyBillRecords, isEnergyBillRecord, ingestEnergyTariffBasisRecords, isEnergyTariffBasisRecord, ingestEnergyGenerationPriceRecords, isEnergyGenerationPriceRecord, ingestEnergyGenerationPeriodRecords, isEnergyGenerationPeriodRecord, resolveSubject, periodFactId } from '@operato/operations-contract';
34
- /* 운영 사실의 문 — 리듀서가 다루는 여섯이 들어오는 자리(미러가 시뮬보다 가난하지 않게). */
35
- export { ingestOperationalRecords, isOperationalRecord, operationalKindOf } from '@operato/operations-contract';
36
- export { attributeEnergy, electricityCost, energyIntensity, energyOfWindows } from "./energy-attribution.js";
37
- /* 에너지 상태 타입은 **계약**에 있다(상태의 모양은 계약이다) — contract 의 `export *` 가 이미 낸다. */
38
- export * from '@operato/operations-contract';
32
+ export * from "./energy-attribution.js";
33
+ export * from "./make-to-order.js";
34
+ /* 클래스 마스터 표 — 상태를 들므로 계약이 아니라 커널이다. */
39
35
  export { ClassMasterTable } from "./class-master-table.js";
@@ -1,4 +1,4 @@
1
- import type { ISOTime } from '@operato/operations-contract';
1
+ import type { ISOTime } from '@operato/ops-contract';
2
2
  import { type TaskDeltaRow } from './task-fold.ts';
3
3
  /** 표준 `JobState` — 우리 작업 상태를 표준 낱말로 옮긴다. */
4
4
  export type JobState = 'ready' | 'running' | 'completed';
package/dist/kernel.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Command, CommandAck, GeneratorSpec } from '@operato/operations-contract';
1
+ import type { Command, CommandAck, GeneratorSpec } from '@operato/ops-contract';
2
2
  import type { AllocationPolicy } from './allocation-policy.ts';
3
3
  import { FlowEngine } from './flow-engine.ts';
4
4
  import type { FlowOrder, FlowTask } from './flow-engine.ts';
package/dist/kernel.js CHANGED
@@ -5,13 +5,13 @@
5
5
  * 입고: 도착 → receiving(Txn PO + Agg 팔레트←케이스 + Object) → putaway → storing.
6
6
  * 출고: SO 오더 → 할당(Txn SO) → pick(bin→staging) → picking → packing(Agg 화물←팔레트) → staging → shipping(DELETE).
7
7
  */
8
- import { CMD } from '@operato/operations-contract';
8
+ import { CMD } from '@operato/ops-contract';
9
9
  import { firstFitPolicy } from "./allocation-policy.js";
10
10
  import { FlowEngine } from "./flow-engine.js";
11
11
  import { planMakeToOrder } from "./make-to-order.js";
12
- import { BIZSTEP, BTT } from '@operato/operations-contract';
13
- import { DISP, ILMD_ATTR, aggregationEvent, objectEvent, transactionEvent } from '@operato/operations-contract';
14
- import { subLotIdOf, itemKeyOf } from '@operato/operations-contract';
12
+ import { BIZSTEP, BTT } from '@operato/ops-contract';
13
+ import { DISP, ILMD_ATTR, aggregationEvent, objectEvent, transactionEvent } from '@operato/ops-contract';
14
+ import { subLotIdOf, itemKeyOf } from '@operato/ops-contract';
15
15
  const TRAVEL_MS = 30_000;
16
16
  const SHELF_MS = 30 * 24 * 3_600_000; // 기본 유통기한(30일)
17
17
  const SHELF_JITTER_MS = 5 * 24 * 3_600_000; // 로트별 만료 편차(FEFO 가 FIFO 와 갈리게)
@@ -1,4 +1,4 @@
1
- import type { OperationDef } from '@operato/operations-contract';
1
+ import type { OperationDef } from '@operato/ops-contract';
2
2
  /** 이 판단이 보는 재고 한 줄 — 무엇이 어디에 얼마나, 팔 수 있나. */
3
3
  export interface StockLine {
4
4
  /** 품목 식별자(GTIN). */
@@ -1,8 +1,8 @@
1
- import type { GeneratorSpec, Command, CommandAck, ProductionSpec, TwinModelDef, IdentityGroundingView, Attention } from '@operato/operations-contract';
1
+ import type { GeneratorSpec, Command, CommandAck, ProductionSpec, TwinModelDef, IdentityGroundingView, Attention } from '@operato/ops-contract';
2
2
  import type { AllocationPolicy } from './allocation-policy.ts';
3
3
  import { FlowEngine } from './flow-engine.ts';
4
4
  import type { FlowOrder, FlowTask } from './flow-engine.ts';
5
- import { type OpMaterialSpecification } from '@operato/operations-contract';
5
+ import { type OpMaterialSpecification } from '@operato/ops-contract';
6
6
  export declare class MesKernel extends FlowEngine {
7
7
  private wipSeq;
8
8
  private prodSeq;
@@ -60,7 +60,7 @@ export declare class MesKernel extends FlowEngine {
60
60
  * 모델 자리(§`TwinModelDef.identity`)로 옮기면 이 override 는 사라진다. 두 자리를 동시에 읽는 것이
61
61
  * 아니라 **하나를 고르는** 것이므로 규칙이 갈리지 않는다.
62
62
  */
63
- protected identityDeclaration(): import("@operato/operations-contract").IdentityDeclaration | undefined;
63
+ protected identityDeclaration(): import("@operato/ops-contract").IdentityDeclaration | undefined;
64
64
  protected identityGroundingView(): IdentityGroundingView;
65
65
  /**
66
66
  * 선언이 말하는 자리 타입이 **이 트윈에 있나** — 로드 시점에 한 번, 모아서 말한다 (2026-08-20).
@@ -8,12 +8,12 @@
8
8
  * ③ 셋업/체인지오버 = work-center 가 제품 전환 시 셋업(changeoverKey=제품 gtin) → OEE Availability.
9
9
  * ④ OEE = base 가 설비(설비)별 계측(가동/셋업/기아/품질). cut=cutter·weld=welder 이종 자원.
10
10
  */
11
- import { identityGroundingOf } from '@operato/operations-contract';
11
+ import { identityGroundingOf } from '@operato/ops-contract';
12
12
  import { firstFitPolicy } from "./allocation-policy.js";
13
13
  import { FlowEngine } from "./flow-engine.js";
14
- import { DISP, objectEvent, transactionEvent, gdtiUri, sgtinClass, bizTransactionUri } from '@operato/operations-contract';
15
- import { MES_BIZSTEP, BTT_PRODORDER, sgtinUri } from '@operato/operations-contract';
16
- import { OP_PARAM } from '@operato/operations-contract';
14
+ import { DISP, objectEvent, transactionEvent, gdtiUri, sgtinClass, bizTransactionUri } from '@operato/ops-contract';
15
+ import { MES_BIZSTEP, BTT_PRODORDER, sgtinUri } from '@operato/ops-contract';
16
+ import { OP_PARAM } from '@operato/ops-contract';
17
17
  /* 아래 셋은 **기본값**이다 — 명세(OperationDef.duration·parameters)가 있으면 그 값이 이긴다.
18
18
  * 이름에 DEFAULT 를 붙인 이유: 예전에는 이것이 유일한 값이어서 "현장 명세" 와 구별되지 않았고,
19
19
  * 그 상수가 수율 판단(주목 신호)까지 만들어 냈다. 무엇을 기본값으로 굴렸는지는 specCoverage() 가 밝힌다. */
@@ -1,5 +1,5 @@
1
- import type { AssetState, TestResult, MaterialQuantity, TwinModelDef, CanonicalEnvelope, LocationState, ItemState, LocationObservation, EquipmentState, PersonState, TaskState, OrderState, StructureShift } from '@operato/operations-contract';
2
- import { type VocabularyElement } from '@operato/operations-contract';
1
+ import type { AssetState, TestResult, MaterialQuantity, TwinModelDef, CanonicalEnvelope, LocationState, ItemState, LocationObservation, EquipmentState, PersonState, TaskState, OrderState, StructureShift } from '@operato/ops-contract';
2
+ import { type VocabularyElement } from '@operato/ops-contract';
3
3
  interface ProjItem {
4
4
  epc: string;
5
5
  /** 로트의 부분(표준 MaterialSubLot.ID) — 비직렬 로트가 자리마다 갈릴 때만. */
@@ -19,9 +19,9 @@
19
19
  * - 운영 델타(task/equipment/order.status) → tasks·equipment·orders (EPCIS 로 재구성 불가한 절반)
20
20
  * 마스터(로케이션)는 board 초기화 + applyMaster 로 갱신(마스터 동기).
21
21
  */
22
- import { OP_EVENT, capabilityOf, itemKeyOf, judgeAgainstSpec, requiredTestsFor, locationStatusOf, readBoardEquipment, readBoardLocations, readBoardAssets, effectivityAt, offCalendarAt, offCalendarReasonAt, activeShiftAt } from '@operato/operations-contract';
23
- import { ILMD_ATTR, parseEpc } from '@operato/operations-contract';
24
- import { expiryFromAttributes, lotFromAttributes } from '@operato/operations-contract';
22
+ import { OP_EVENT, capabilityOf, itemKeyOf, judgeAgainstSpec, requiredTestsFor, locationStatusOf, readBoardEquipment, readBoardLocations, readBoardAssets, effectivityAt, offCalendarAt, offCalendarReasonAt, activeShiftAt } from '@operato/ops-contract';
23
+ import { ILMD_ATTR, parseEpc } from '@operato/ops-contract';
24
+ import { expiryFromAttributes, lotFromAttributes } from '@operato/ops-contract';
25
25
  /* 클래스 마스터 표는 상태를 들므로 커널에 있다(§`class-master-table`). */
26
26
  import { ClassMasterTable } from "./class-master-table.js";
27
27
  /**
package/dist/runtime.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CanonicalEnvelope, Command, CommandAck, ScenarioControl, StateSnapshot, TwinKernel } from '@operato/operations-contract';
1
+ import type { CanonicalEnvelope, Command, CommandAck, ScenarioControl, StateSnapshot, TwinKernel } from '@operato/ops-contract';
2
2
  export type SubscriptionMessage = {
3
3
  kind: 'snapshot';
4
4
  revision: number;
@@ -1,4 +1,4 @@
1
- import type { TaskStatusDelta } from '@operato/operations-contract';
1
+ import type { TaskStatusDelta } from '@operato/ops-contract';
2
2
  /**
3
3
  * 되읽을 저널 한 줄 — 필요한 것만.
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { StateSnapshot } from '@operato/operations-contract';
1
+ import type { StateSnapshot } from '@operato/ops-contract';
2
2
  import { type StateDivergence } from './divergence.ts';
3
3
  /** 관찰 대상 = fork 가능한 트윈(FlowEngine 이 만족). */
4
4
  export interface ObservableTwin {
@@ -1,4 +1,4 @@
1
- import type { GeneratorSpec } from '@operato/operations-contract';
1
+ import type { GeneratorSpec } from '@operato/ops-contract';
2
2
  import type { AllocationPolicy } from './allocation-policy.ts';
3
3
  import { FlowEngine } from './flow-engine.ts';
4
4
  import type { FlowOrder, FlowTask } from './flow-engine.ts';
@@ -15,11 +15,11 @@
15
15
  * - drop(기본): 트레일러를 야드 슬롯에 내려놓고(주차) 창 도래 시 호슬러가 도크로 pull. 야드 버퍼 사용.
16
16
  * - live: 게이트에서 대기하다 창 도래 시 도크로 직행(야드 미경유). 게이트/도크를 더 오래 점유.
17
17
  */
18
- import { itemKeyOf } from '@operato/operations-contract';
18
+ import { itemKeyOf } from '@operato/ops-contract';
19
19
  import { firstFitPolicy } from "./allocation-policy.js";
20
20
  import { FlowEngine } from "./flow-engine.js";
21
- import { DISP, objectEvent, transactionEvent } from '@operato/operations-contract';
22
- import { YARD_BIZSTEP, BTT_DELIVERY } from '@operato/operations-contract';
21
+ import { DISP, objectEvent, transactionEvent } from '@operato/ops-contract';
22
+ import { YARD_BIZSTEP, BTT_DELIVERY } from '@operato/ops-contract';
23
23
  const TRAVEL_MS = 20_000; // 야드 이동
24
24
  const DWELL_MS = 30_000; // 도크 체류(상·하차) — depart 이동에 folded
25
25
  const WINDOW_DELAY_MS = 40_000; // 도착 후 어포인트먼트 창까지(early arrival → 대기)