@things-factory/headless-twin 10.0.11 โ†’ 10.0.13

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.
Files changed (369) hide show
  1. package/dist-server/engine/canonical-ingest.d.ts +81 -3
  2. package/dist-server/engine/canonical-ingest.js +89 -10
  3. package/dist-server/engine/canonical-ingest.js.map +1 -1
  4. package/dist-server/engine/command-routing.js +1 -1
  5. package/dist-server/engine/command-routing.js.map +1 -1
  6. package/dist-server/engine/declared-stimulus.d.ts +43 -0
  7. package/dist-server/engine/declared-stimulus.js +57 -0
  8. package/dist-server/engine/declared-stimulus.js.map +1 -0
  9. package/dist-server/engine/index.d.ts +5 -0
  10. package/dist-server/engine/index.js +6 -0
  11. package/dist-server/engine/index.js.map +1 -1
  12. package/dist-server/engine/ingest-health.d.ts +335 -0
  13. package/dist-server/engine/ingest-health.js +434 -0
  14. package/dist-server/engine/ingest-health.js.map +1 -0
  15. package/dist-server/engine/integration-coverage.d.ts +76 -0
  16. package/dist-server/engine/integration-coverage.js +73 -0
  17. package/dist-server/engine/integration-coverage.js.map +1 -0
  18. package/dist-server/engine/integration-probes.d.ts +65 -0
  19. package/dist-server/engine/integration-probes.js +100 -0
  20. package/dist-server/engine/integration-probes.js.map +1 -0
  21. package/dist-server/engine/integration-runner.d.ts +45 -0
  22. package/dist-server/engine/integration-runner.js +59 -0
  23. package/dist-server/engine/integration-runner.js.map +1 -0
  24. package/dist-server/engine/integration-target-profile.d.ts +57 -0
  25. package/dist-server/engine/integration-target-profile.js +79 -0
  26. package/dist-server/engine/integration-target-profile.js.map +1 -0
  27. package/dist-server/engine/kpi-fold.d.ts +39 -0
  28. package/dist-server/engine/kpi-fold.js +68 -5
  29. package/dist-server/engine/kpi-fold.js.map +1 -1
  30. package/dist-server/engine/kpi-query.d.ts +3 -3
  31. package/dist-server/engine/kpi-query.js +132 -18
  32. package/dist-server/engine/kpi-query.js.map +1 -1
  33. package/dist-server/engine/live-feed-registry.d.ts +1 -1
  34. package/dist-server/engine/live-feed-registry.js +3 -17
  35. package/dist-server/engine/live-feed-registry.js.map +1 -1
  36. package/dist-server/engine/load-meter.d.ts +1 -1
  37. package/dist-server/engine/load-meter.js +12 -3
  38. package/dist-server/engine/load-meter.js.map +1 -1
  39. package/dist-server/engine/local-declarations.d.ts +3 -6
  40. package/dist-server/engine/local-declarations.js +97 -16
  41. package/dist-server/engine/local-declarations.js.map +1 -1
  42. package/dist-server/engine/log.d.ts +18 -0
  43. package/dist-server/engine/log.js +80 -0
  44. package/dist-server/engine/log.js.map +1 -0
  45. package/dist-server/engine/loop-lag.d.ts +54 -0
  46. package/dist-server/engine/loop-lag.js +87 -0
  47. package/dist-server/engine/loop-lag.js.map +1 -0
  48. package/dist-server/engine/measured-yield.d.ts +42 -0
  49. package/dist-server/engine/measured-yield.js +75 -0
  50. package/dist-server/engine/measured-yield.js.map +1 -0
  51. package/dist-server/engine/model-gap.d.ts +108 -0
  52. package/dist-server/engine/model-gap.js +95 -0
  53. package/dist-server/engine/model-gap.js.map +1 -0
  54. package/dist-server/engine/operation-basis.d.ts +16 -0
  55. package/dist-server/engine/operation-basis.js +20 -2
  56. package/dist-server/engine/operation-basis.js.map +1 -1
  57. package/dist-server/engine/property-effects.js +17 -0
  58. package/dist-server/engine/property-effects.js.map +1 -1
  59. package/dist-server/engine/restart-policy.d.ts +13 -0
  60. package/dist-server/engine/restart-policy.js +52 -0
  61. package/dist-server/engine/restart-policy.js.map +1 -0
  62. package/dist-server/engine/runtime-key.js +1 -1
  63. package/dist-server/engine/runtime-key.js.map +1 -1
  64. package/dist-server/engine/spec-coverage.d.ts +8 -0
  65. package/dist-server/engine/spec-coverage.js +3 -1
  66. package/dist-server/engine/spec-coverage.js.map +1 -1
  67. package/dist-server/engine/stage-path.d.ts +83 -0
  68. package/dist-server/engine/stage-path.js +118 -0
  69. package/dist-server/engine/stage-path.js.map +1 -0
  70. package/dist-server/engine/twin-engine.d.ts +400 -31
  71. package/dist-server/engine/twin-engine.js +1198 -187
  72. package/dist-server/engine/twin-engine.js.map +1 -1
  73. package/dist-server/index.js +35 -3
  74. package/dist-server/index.js.map +1 -1
  75. package/dist-server/migrations/1786100000000-PromoteEventActionAndSyncWarnings.d.ts +5 -0
  76. package/dist-server/migrations/1786100000000-PromoteEventActionAndSyncWarnings.js +58 -0
  77. package/dist-server/migrations/1786100000000-PromoteEventActionAndSyncWarnings.js.map +1 -0
  78. package/dist-server/migrations/1786200000000-CarryLiveFeedCursor.d.ts +5 -0
  79. package/dist-server/migrations/1786200000000-CarryLiveFeedCursor.js +55 -0
  80. package/dist-server/migrations/1786200000000-CarryLiveFeedCursor.js.map +1 -0
  81. package/dist-server/migrations/index.js +7 -1
  82. package/dist-server/migrations/index.js.map +1 -1
  83. package/dist-server/service/index.d.ts +5 -2
  84. package/dist-server/service/index.js +18 -7
  85. package/dist-server/service/index.js.map +1 -1
  86. package/dist-server/service/reference/control-routing.d.ts +14 -0
  87. package/dist-server/service/reference/control-routing.js +64 -0
  88. package/dist-server/service/reference/control-routing.js.map +1 -0
  89. package/dist-server/service/reference/discovery-result.d.ts +1 -1
  90. package/dist-server/service/reference/discovery-result.js +1 -1
  91. package/dist-server/service/reference/discovery-result.js.map +1 -1
  92. package/dist-server/service/reference/index.d.ts +5 -1
  93. package/dist-server/service/reference/index.js +8 -1
  94. package/dist-server/service/reference/index.js.map +1 -1
  95. package/dist-server/service/reference/reference-adapter.d.ts +251 -3
  96. package/dist-server/service/reference/reference-adapter.js +43 -1
  97. package/dist-server/service/reference/reference-adapter.js.map +1 -1
  98. package/dist-server/service/reference/reference-assessment.d.ts +68 -0
  99. package/dist-server/service/reference/reference-assessment.js +136 -0
  100. package/dist-server/service/reference/reference-assessment.js.map +1 -0
  101. package/dist-server/service/reference/reference-live.d.ts +12 -1
  102. package/dist-server/service/reference/reference-live.js +119 -14
  103. package/dist-server/service/reference/reference-live.js.map +1 -1
  104. package/dist-server/service/reference/reference-master.d.ts +47 -1
  105. package/dist-server/service/reference/reference-master.js +34 -4
  106. package/dist-server/service/reference/reference-master.js.map +1 -1
  107. package/dist-server/service/reference/reference-probe.d.ts +92 -0
  108. package/dist-server/service/reference/reference-probe.js +186 -0
  109. package/dist-server/service/reference/reference-probe.js.map +1 -0
  110. package/dist-server/service/reference/reference-progress-subscription.d.ts +17 -0
  111. package/dist-server/service/reference/reference-progress-subscription.js +94 -0
  112. package/dist-server/service/reference/reference-progress-subscription.js.map +1 -0
  113. package/dist-server/service/reference/reference-progress.d.ts +38 -0
  114. package/dist-server/service/reference/reference-progress.js +71 -0
  115. package/dist-server/service/reference/reference-progress.js.map +1 -0
  116. package/dist-server/service/reference/reference-resolver.d.ts +3 -3
  117. package/dist-server/service/reference/reference-resolver.js +242 -58
  118. package/dist-server/service/reference/reference-resolver.js.map +1 -1
  119. package/dist-server/service/reference/twin-reference.d.ts +32 -0
  120. package/dist-server/service/reference/twin-reference.js +10 -0
  121. package/dist-server/service/reference/twin-reference.js.map +1 -1
  122. package/dist-server/service/twin-audit/command-audit.d.ts +34 -0
  123. package/dist-server/service/twin-audit/command-audit.js +15 -1
  124. package/dist-server/service/twin-audit/command-audit.js.map +1 -1
  125. package/dist-server/service/twin-audit/twin-audit-event.d.ts +3 -0
  126. package/dist-server/service/twin-audit/twin-audit-event.js +10 -0
  127. package/dist-server/service/twin-audit/twin-audit-event.js.map +1 -1
  128. package/dist-server/service/twin-control/twin-control-mutation.d.ts +15 -2
  129. package/dist-server/service/twin-control/twin-control-mutation.js +88 -36
  130. package/dist-server/service/twin-control/twin-control-mutation.js.map +1 -1
  131. package/dist-server/service/twin-event/journal-count.d.ts +21 -0
  132. package/dist-server/service/twin-event/journal-count.js +26 -0
  133. package/dist-server/service/twin-event/journal-count.js.map +1 -0
  134. package/dist-server/service/twin-event/twin-event-keys.d.ts +9 -0
  135. package/dist-server/service/twin-event/twin-event-keys.js +15 -18
  136. package/dist-server/service/twin-event/twin-event-keys.js.map +1 -1
  137. package/dist-server/service/twin-event/twin-event-type.d.ts +3 -1
  138. package/dist-server/service/twin-event/twin-event-type.js +18 -1
  139. package/dist-server/service/twin-event/twin-event-type.js.map +1 -1
  140. package/dist-server/service/twin-event/twin-event.d.ts +1 -0
  141. package/dist-server/service/twin-event/twin-event.js +9 -1
  142. package/dist-server/service/twin-event/twin-event.js.map +1 -1
  143. package/dist-server/service/twin-forecast/twin-forecast-query.js +2 -1
  144. package/dist-server/service/twin-forecast/twin-forecast-query.js.map +1 -1
  145. package/dist-server/service/twin-ingest-window/index.d.ts +5 -0
  146. package/dist-server/service/twin-ingest-window/index.js +10 -0
  147. package/dist-server/service/twin-ingest-window/index.js.map +1 -0
  148. package/dist-server/service/twin-ingest-window/twin-ingest-window-query.d.ts +12 -0
  149. package/dist-server/service/twin-ingest-window/twin-ingest-window-query.js +123 -0
  150. package/dist-server/service/twin-ingest-window/twin-ingest-window-query.js.map +1 -0
  151. package/dist-server/service/twin-ingest-window/twin-ingest-window-writer.d.ts +1 -0
  152. package/dist-server/service/twin-ingest-window/twin-ingest-window-writer.js +51 -0
  153. package/dist-server/service/twin-ingest-window/twin-ingest-window-writer.js.map +1 -0
  154. package/dist-server/service/twin-ingest-window/twin-ingest-window.d.ts +16 -0
  155. package/dist-server/service/twin-ingest-window/twin-ingest-window.js +108 -0
  156. package/dist-server/service/twin-ingest-window/twin-ingest-window.js.map +1 -0
  157. package/dist-server/service/twin-instance/twin-instance.d.ts +1 -1
  158. package/dist-server/service/twin-instance/twin-instance.js +2 -2
  159. package/dist-server/service/twin-instance/twin-instance.js.map +1 -1
  160. package/dist-server/service/twin-journal/twin-journal-query.js +58 -5
  161. package/dist-server/service/twin-journal/twin-journal-query.js.map +1 -1
  162. package/dist-server/service/twin-lifecycle/twin-lifecycle-mutation.d.ts +14 -0
  163. package/dist-server/service/twin-lifecycle/twin-lifecycle-mutation.js +74 -3
  164. package/dist-server/service/twin-lifecycle/twin-lifecycle-mutation.js.map +1 -1
  165. package/dist-server/service/twin-metrics/twin-metrics-query.d.ts +1 -0
  166. package/dist-server/service/twin-metrics/twin-metrics-query.js +78 -3
  167. package/dist-server/service/twin-metrics/twin-metrics-query.js.map +1 -1
  168. package/dist-server/service/twin-model/axis-journal-evidence.d.ts +2 -0
  169. package/dist-server/service/twin-model/axis-journal-evidence.js +89 -0
  170. package/dist-server/service/twin-model/axis-journal-evidence.js.map +1 -0
  171. package/dist-server/service/twin-model/epcis-coverage.d.ts +1 -1
  172. package/dist-server/service/twin-model/epcis-coverage.js +19 -7
  173. package/dist-server/service/twin-model/epcis-coverage.js.map +1 -1
  174. package/dist-server/service/twin-model/iec61850-coverage.d.ts +1 -1
  175. package/dist-server/service/twin-model/iec61850-coverage.js +18 -7
  176. package/dist-server/service/twin-model/iec61850-coverage.js.map +1 -1
  177. package/dist-server/service/twin-model/isa95-coverage.d.ts +14 -0
  178. package/dist-server/service/twin-model/isa95-coverage.js +23 -9
  179. package/dist-server/service/twin-model/isa95-coverage.js.map +1 -1
  180. package/dist-server/service/twin-model/item-ref.d.ts +24 -0
  181. package/dist-server/service/twin-model/item-ref.js +88 -0
  182. package/dist-server/service/twin-model/item-ref.js.map +1 -0
  183. package/dist-server/service/twin-model/name-index.d.ts +36 -0
  184. package/dist-server/service/twin-model/name-index.js +116 -0
  185. package/dist-server/service/twin-model/name-index.js.map +1 -0
  186. package/dist-server/service/twin-model/project-structure.js +1 -1
  187. package/dist-server/service/twin-model/project-structure.js.map +1 -1
  188. package/dist-server/service/twin-model/status-tally.d.ts +9 -0
  189. package/dist-server/service/twin-model/status-tally.js +37 -0
  190. package/dist-server/service/twin-model/status-tally.js.map +1 -0
  191. package/dist-server/service/twin-model/twin-lineage-query.js +40 -12
  192. package/dist-server/service/twin-model/twin-lineage-query.js.map +1 -1
  193. package/dist-server/service/twin-model/twin-model-item-query.js +38 -39
  194. package/dist-server/service/twin-model/twin-model-item-query.js.map +1 -1
  195. package/dist-server/service/twin-model/twin-model-query.js +157 -5
  196. package/dist-server/service/twin-model/twin-model-query.js.map +1 -1
  197. package/dist-server/service/twin-model/twin-model-tree-query.js +7 -0
  198. package/dist-server/service/twin-model/twin-model-tree-query.js.map +1 -1
  199. package/dist-server/service/twin-readiness/index.d.ts +2 -0
  200. package/dist-server/service/twin-readiness/index.js +6 -0
  201. package/dist-server/service/twin-readiness/index.js.map +1 -0
  202. package/dist-server/service/twin-readiness/twin-readiness-query.d.ts +3 -0
  203. package/dist-server/service/twin-readiness/twin-readiness-query.js +103 -0
  204. package/dist-server/service/twin-readiness/twin-readiness-query.js.map +1 -0
  205. package/dist-server/service/twin-space/twin-space-resolver.d.ts +2 -2
  206. package/dist-server/service/twin-space/twin-space-resolver.js +5 -4
  207. package/dist-server/service/twin-space/twin-space-resolver.js.map +1 -1
  208. package/dist-shared/entity-delta.d.ts +23 -3
  209. package/dist-shared/entity-delta.js +12 -8
  210. package/dist-shared/entity-delta.js.map +1 -1
  211. package/dist-shared/kpi-broadcast.js +1 -1
  212. package/dist-shared/kpi-broadcast.js.map +1 -1
  213. package/dist-shared/touched-items.d.ts +7 -0
  214. package/dist-shared/touched-items.js +80 -0
  215. package/dist-shared/touched-items.js.map +1 -0
  216. package/package.json +7 -7
  217. package/server/engine/canonical-ingest.ts +164 -15
  218. package/server/engine/command-routing.ts +1 -1
  219. package/server/engine/declared-stimulus.ts +66 -0
  220. package/server/engine/index.ts +6 -0
  221. package/server/engine/ingest-health.ts +704 -0
  222. package/server/engine/integration-coverage.ts +147 -0
  223. package/server/engine/integration-probes.ts +144 -0
  224. package/server/engine/integration-runner.ts +95 -0
  225. package/server/engine/integration-target-profile.ts +103 -0
  226. package/server/engine/kpi-fold.ts +101 -5
  227. package/server/engine/kpi-query.ts +137 -23
  228. package/server/engine/live-feed-registry.ts +4 -3
  229. package/server/engine/load-meter.ts +12 -3
  230. package/server/engine/local-declarations.ts +97 -19
  231. package/server/engine/log.ts +72 -0
  232. package/server/engine/loop-lag.ts +120 -0
  233. package/server/engine/measured-yield.ts +89 -0
  234. package/server/engine/model-gap.ts +168 -0
  235. package/server/engine/operation-basis.ts +33 -2
  236. package/server/engine/property-effects.ts +17 -0
  237. package/server/engine/restart-policy.ts +55 -0
  238. package/server/engine/runtime-key.ts +1 -1
  239. package/server/engine/spec-coverage.ts +23 -3
  240. package/server/engine/stage-path.ts +172 -0
  241. package/server/engine/twin-engine.ts +1318 -186
  242. package/server/index.ts +36 -3
  243. package/server/migrations/1786100000000-PromoteEventActionAndSyncWarnings.ts +54 -0
  244. package/server/migrations/1786200000000-CarryLiveFeedCursor.ts +53 -0
  245. package/server/migrations/index.ts +7 -1
  246. package/server/service/index.ts +11 -0
  247. package/server/service/reference/control-routing.ts +62 -0
  248. package/server/service/reference/discovery-result.ts +1 -1
  249. package/server/service/reference/index.ts +7 -1
  250. package/server/service/reference/reference-adapter.ts +275 -5
  251. package/server/service/reference/reference-assessment.ts +215 -0
  252. package/server/service/reference/reference-live.ts +126 -14
  253. package/server/service/reference/reference-master.ts +64 -4
  254. package/server/service/reference/reference-probe.ts +264 -0
  255. package/server/service/reference/reference-progress-subscription.ts +73 -0
  256. package/server/service/reference/reference-progress.ts +95 -0
  257. package/server/service/reference/reference-resolver.ts +246 -19
  258. package/server/service/reference/twin-reference.ts +39 -1
  259. package/server/service/twin-audit/command-audit.ts +34 -1
  260. package/server/service/twin-audit/twin-audit-event.ts +20 -0
  261. package/server/service/twin-control/twin-control-mutation.ts +78 -30
  262. package/server/service/twin-event/journal-count.ts +53 -0
  263. package/server/service/twin-event/twin-event-keys.ts +16 -1
  264. package/server/service/twin-event/twin-event-type.ts +26 -2
  265. package/server/service/twin-event/twin-event.ts +7 -0
  266. package/server/service/twin-forecast/twin-forecast-query.ts +2 -1
  267. package/server/service/twin-ingest-window/index.ts +7 -0
  268. package/server/service/twin-ingest-window/twin-ingest-window-query.ts +125 -0
  269. package/server/service/twin-ingest-window/twin-ingest-window-writer.ts +57 -0
  270. package/server/service/twin-ingest-window/twin-ingest-window.ts +113 -0
  271. package/server/service/twin-instance/twin-instance.ts +16 -10
  272. package/server/service/twin-journal/twin-journal-query.ts +59 -5
  273. package/server/service/twin-lifecycle/twin-lifecycle-mutation.ts +79 -4
  274. package/server/service/twin-metrics/twin-metrics-query.ts +81 -3
  275. package/server/service/twin-model/axis-journal-evidence.ts +57 -0
  276. package/server/service/twin-model/epcis-coverage.ts +2 -8
  277. package/server/service/twin-model/iec61850-coverage.ts +2 -8
  278. package/server/service/twin-model/isa95-coverage.ts +22 -9
  279. package/server/service/twin-model/item-ref.ts +80 -0
  280. package/server/service/twin-model/name-index.ts +94 -0
  281. package/server/service/twin-model/project-structure.ts +1 -1
  282. package/server/service/twin-model/status-tally.ts +37 -0
  283. package/server/service/twin-model/twin-lineage-query.ts +38 -9
  284. package/server/service/twin-model/twin-model-item-query.ts +26 -27
  285. package/server/service/twin-model/twin-model-query.ts +156 -5
  286. package/server/service/twin-model/twin-model-tree-query.ts +7 -0
  287. package/server/service/twin-readiness/index.ts +3 -0
  288. package/server/service/twin-readiness/twin-readiness-query.ts +96 -0
  289. package/server/service/twin-space/twin-space-resolver.ts +5 -4
  290. package/shared/entity-delta.ts +31 -7
  291. package/shared/kpi-broadcast.ts +1 -1
  292. package/shared/touched-items.ts +73 -0
  293. package/test/adopt-structure-live.test.ts +7 -7
  294. package/test/axis-journal-evidence.test.ts +71 -0
  295. package/test/axis-read.test.ts +101 -1
  296. package/test/boot-resume.test.ts +93 -27
  297. package/test/broadcast-cost-baseline.test.ts +200 -0
  298. package/test/broadcast-period.test.ts +58 -0
  299. package/test/canonical-ingest-vocabularies.test.ts +36 -1
  300. package/test/canonical-quantity-door.test.ts +61 -0
  301. package/test/command-routing.test.ts +1 -1
  302. package/test/control-capability.test.ts +103 -0
  303. package/test/declared-location-types.test.ts +89 -0
  304. package/test/declared-stimulus.test.ts +88 -0
  305. package/test/discovery-result.test.ts +1 -1
  306. package/test/duration-estimators.test.ts +1 -1
  307. package/test/entity-delta.test.ts +2 -2
  308. package/test/ingest-bench.test.ts +3 -3
  309. package/test/ingest-health-engine.test.ts +248 -0
  310. package/test/ingest-health-wiring.test.ts +119 -0
  311. package/test/ingest-health.test.ts +306 -0
  312. package/test/ingest-history.test.ts +247 -0
  313. package/test/ingest-running-guard.test.ts +5 -5
  314. package/test/instance-cache-lifecycle.test.ts +1 -1
  315. package/test/integration-probes.test.ts +103 -0
  316. package/test/integration-runner.test.ts +95 -0
  317. package/test/item-ref.test.ts +78 -0
  318. package/test/journal-read-discipline.test.ts +177 -0
  319. package/test/journal-retention.test.ts +133 -0
  320. package/test/journal-sort-axis.test.ts +142 -0
  321. package/test/journal-write-door.test.ts +110 -0
  322. package/test/journal-write-trend.test.ts +115 -0
  323. package/test/kernel-kind-guard.test.ts +4 -4
  324. package/test/kpi-baseline-db.test.ts +1 -1
  325. package/test/kpi-fold.test.ts +90 -3
  326. package/test/kpi-query-bench.test.ts +3 -3
  327. package/test/lineage-survives-restart.test.ts +20 -4
  328. package/test/live-cursor-wiring.test.ts +87 -0
  329. package/test/live-feed-registry.test.ts +15 -7
  330. package/test/live-kernel-facts.test.ts +7 -7
  331. package/test/live-mirror-parity.test.ts +6 -0
  332. package/test/load-meter.test.ts +29 -15
  333. package/test/local-declarations.test.ts +109 -2
  334. package/test/log-stamp.test.ts +59 -0
  335. package/test/loop-lag.test.ts +82 -0
  336. package/test/measured-yield.test.ts +90 -0
  337. package/test/model-gap.test.ts +153 -0
  338. package/test/oee-accumulator.test.ts +4 -0
  339. package/test/operation-basis.test.ts +28 -1
  340. package/test/operational-vocabulary.test.ts +108 -0
  341. package/test/operations-capability-db.test.ts +4 -4
  342. package/test/project-structure-db.test.ts +1 -1
  343. package/test/projection-reaches-screen.test.ts +1 -1
  344. package/test/property-effects.test.ts +28 -0
  345. package/test/read-failure-visible.test.ts +145 -0
  346. package/test/reference-grounding.test.ts +70 -0
  347. package/test/resolve-ts-siblings.mjs +52 -0
  348. package/test/restart-policy.test.ts +111 -0
  349. package/test/resync-origin-site.test.ts +7 -1
  350. package/test/revision-axis.test.ts +93 -0
  351. package/test/runtime-key.test.ts +2 -2
  352. package/test/scale-twin-bench.test.ts +2 -2
  353. package/test/source-outcome-audit.test.ts +104 -0
  354. package/test/spec-coverage.test.ts +1 -1
  355. package/test/stage-path.test.ts +95 -0
  356. package/test/standard-coverage.test.ts +15 -3
  357. package/test/status-tally.test.ts +55 -0
  358. package/test/structure-revision-db.test.ts +31 -27
  359. package/test/tenant-registry-db.test.ts +3 -3
  360. package/test/time-range.test.ts +152 -0
  361. package/test/touched-items.test.ts +61 -0
  362. package/test/twin-event-keys.test.ts +10 -2
  363. package/test/twin-model-item-db.test.ts +5 -3
  364. package/test/twin-model-tree-db.test.ts +7 -7
  365. package/test/twin-origin-resync.test.ts +4 -4
  366. package/test/warm-start-seam.test.ts +4 -0
  367. package/test/yield-loop.test.ts +199 -0
  368. package/tsconfig.shared.tsbuildinfo +1 -1
  369. package/tsconfig.tsbuildinfo +1 -1
@@ -2,10 +2,12 @@ import type { ReducerCheckpoint } from '@operato/twin-kernel';
2
2
  import type { OeeCheckpoint } from './oee-accumulator.js';
3
3
  import { type ReferenceMaster } from '../service/reference/reference-master.js';
4
4
  import { type IngestWarning } from '../service/reference/reference-master.js';
5
+ import { type RestartPolicy } from './restart-policy.js';
5
6
  import { type ModelBasis } from './model-basis.js';
6
7
  import { type LoadMeter, type LoadPhase } from './load-meter.js';
7
8
  import { type StructureDiff } from './structure-diff.js';
8
9
  import { OeeAccumulator } from './oee-accumulator.js';
10
+ import { type IngestHealthView, type IngestWindow } from './ingest-health.js';
9
11
  import type { TwinModelDef, StructureShift, TwinRuntime as TwinRuntimeType, CanonicalEnvelope } from '@operato/twin-kernel';
10
12
  interface TwinMetrics {
11
13
  ingestedTotal: number;
@@ -14,19 +16,30 @@ interface TwinMetrics {
14
16
  ingestRate: number;
15
17
  broadcastRate: number;
16
18
  journalRate: number;
19
+ /**
20
+ * **์ง€๊ธˆ ๋Œ€๊ธฐ ์ค‘์ธ** ์ €๋„ ๊ฑด์ˆ˜ โ€” ์•„์ง DB ๋กœ ๋‚˜๊ฐ€์ง€ ์•Š์€ ๊ฒƒ.
21
+ *
22
+ * โ”€โ”€ ๋ฌด์—‡์ด ํ‹€๋ ธ์—ˆ๋‚˜ (2026-08-21) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
23
+ * ์˜ˆ์ „์—๋Š” ใ€Œ๋งˆ์ง€๋ง‰ flush ์—์„œ ์“ด ๊ฑด์ˆ˜ใ€๋ฅผ ์—ฌ๊ธฐ ๋„ฃ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ 200ms ๋งˆ๋‹ค ๋ชจ์•„ ํ•œ ๋ฌธ์œผ๋กœ ๋„ฃ๋Š” ๊ฒƒ์€
24
+ * **์ •์ƒ ๋™์ž‘**์ด๋‹ค(๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“  ๊ฒƒ์ด ์–ด์ œ ๊ณ ์นœ ์„ฑ๋Šฅ ์ž‘์—…์ด๋‹ค). ๊ทธ๋ž˜์„œ ์ •์ƒ์ ์œผ๋กœ 10๊ฑด์„ ์“ด ์งํ›„
25
+ * ํ™”๋ฉด์— ใ€Œ๋ฐ€๋ฆผ 10ใ€ ๊ฒฝ๊ณ ๊ฐ€ ๋–ด๊ณ , ๋‹ค์Œ flush ๊นŒ์ง€ ๊ทธ ๊ฐ’์ด ๋‚จ์•˜๋‹ค โ€” ํ๋Š” ์ด๋ฏธ 0 ์ธ๋ฐ๋„.
26
+ *
27
+ * ์šด์˜์ž์—๊ฒŒ ๊ทธ๊ฒƒ์€ ใ€Œ์ €์žฅ์ด 10๊ฑด ๋ฐ€๋ ค ์žˆ๋‹คใ€๋กœ ์ฝํžŒ๋‹ค. ๊ฑฐ์ง“ ๊ฒฝ๋ณด๋Š” ์ฐธ ๊ฒฝ๋ณด๋ฅผ ์ฃฝ์ธ๋‹ค.
28
+ *
29
+ * ์ด์ œ ์ด ๊ฐ’์€ **์ง€๊ธˆ ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ**์ด๋‹ค: ๋‹ค ๋‚˜๊ฐ”์œผ๋ฉด 0 ์ด๊ณ , ์ •๋ง๋กœ ์Œ“์ด๋Š” ์ค‘์ด๋ฉด ๊ทธ ์ˆ˜๊ฐ€ ์ž๋ž€๋‹ค.
30
+ */
17
31
  backlog: number;
18
32
  _accIngest: number;
19
33
  _accBroadcast: number;
20
34
  _accJournal: number;
21
35
  _windowStartMs: number;
22
36
  }
23
- export type RealityMode = 'mirror' | 'sim-world' | 'sim-experiment';
24
- export declare const DEFAULT_REALITY_MODE: RealityMode;
37
+ export type { RestartPolicy } from './restart-policy.js';
25
38
  interface InstanceRuntime {
26
39
  /** ๋ถ€ํ•˜ ๊ณ„๊ธฐํŒ โ€” ์ž‘์—…๋ณ„ ์†Œ์š”. ์‹œ๋ฎฌยท๋ผ์ด๋ธŒ ๋ชจ๋‘ ๋ถ™๋Š”๋‹ค(๋ˆ„๊ฐ€ ๋ฃจํ”„๋ฅผ ์ ์œ ํ•˜๋Š”์ง€ ๋ณด๋ ค๋ฉด ๋‘˜ ๋‹ค ํ•„์š”ํ•˜๋‹ค). */
27
40
  load?: LoadMeter;
28
41
  /** ํ˜„์‹ค ์ถœ์ฒ˜ ์„ ์–ธ(ยง0 ํ”„๋ ˆ์ž„ โ‘ ). ๋ถ€ํŒ… ๊ฑฐ๋™(reset/resume/resync)์˜ ๊ทผ๊ฑฐ. */
29
- realityMode?: RealityMode;
42
+ restartPolicy?: RestartPolicy;
30
43
  id: string;
31
44
  domainId: string;
32
45
  domain?: any;
@@ -50,8 +63,19 @@ interface InstanceRuntime {
50
63
  timer?: any;
51
64
  /** ์—”ํ‹ฐํ‹ฐ๋ณ„ ๋งˆ์ง€๋ง‰ ๋ฐœํ–‰ ์‹œ๊ทธ๋‹ˆ์ฒ˜ โ€” ๊ฐ’์ด ๋ฐ”๋€ ์—”ํ‹ฐํ‹ฐ๋งŒ ์žฌ๋ฐœํ–‰(๋ฌด๋ณ€ํ™” ๋ฐ˜๋ณต push ๋ฐฉ์ง€). */
52
65
  entitySigs?: Map<string, string>;
53
- /** live ๋ฐฉ์†ก ๋ณ‘ํ•ฉ(ingest-scale ยง4.4) โ€” ingest ๋งˆ๋‹ค ๋ฐฉ์†กํ•˜์ง€ ์•Š๊ณ  dirty ํ‘œ์‹œ โ†’ coalescer tick ์ด ์ฃผ๊ธฐ ๋ฐฉ์†ก. */
66
+ /** live ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ๋ณ‘ํ•ฉ(ingest-scale ยง4.4) โ€” ingest ๋งˆ๋‹ค ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…ํ•˜์ง€ ์•Š๊ณ  dirty ํ‘œ์‹œ โ†’ coalescer tick ์ด ์ฃผ๊ธฐ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…. */
54
67
  dirty?: boolean;
68
+ /**
69
+ * ์ด ์ฐฝ์— **๊ฑด๋“œ๋ฆฐ ๋ฌผํ’ˆ ํƒœ๊ทธ** โ€” ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ๊ทธ๊ฒƒ๋งŒ ๋งŒ๋“ ๋‹ค.
70
+ *
71
+ * `undefined` ๋Š” ใ€Œ๋งํ•  ์ˆ˜ ์—†๋‹คใ€๋‹ค(๋‚ฏ์„  ์‚ฌ๊ฑด์ด ํ•˜๋‚˜๋ผ๋„ ์™”๋‹ค) โ†’ ์ „๋ถ€ ๋งŒ๋“ ๋‹ค. ๋นˆ ์ง‘ํ•ฉ์€ ใ€Œ๋ฌผํ’ˆ์€
72
+ * ํ•˜๋‚˜๋„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•˜๋‹คใ€์ด๊ณ , ๊ทธ ๋‘˜์€ ๋‹ค๋ฅธ ์‚ฌ์‹ค์ด๋‹ค.
73
+ */
74
+ dirtyItems?: Set<string>;
75
+ /** ๋‹ค์Œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์—์„œ ์ „๋ถ€ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋‚˜ โ€” ์ฃผ๊ธฐ๋งˆ๋‹ค ํ•œ ๋ฒˆ์€ ๊ทธ๋ฌผ๋กœ ์ „๋ถ€ ๋งŒ๋“ ๋‹ค. */
76
+ fullBroadcastDue?: boolean;
77
+ /** ์ „๋ถ€ ๋งŒ๋“ค๊ธฐ๊นŒ์ง€ ๋‚จ์€ ์ฐฝ ์ˆ˜. */
78
+ fullBroadcastCountdown?: number;
55
79
  /** live ์ €๋„ ๊ฒฐ์„  โ€” ingest ์ด๋ฒคํŠธ๋ฅผ ๋ชจ์•˜๋‹ค๊ฐ€ coalescer tick ์—์„œ ๋ฐฐ์น˜ ๊ธฐ๋ก(์ด๋ฒคํŠธ๋งˆ๋‹ค DB write ๊ธˆ์ง€). */
56
80
  pendingJournal?: any[];
57
81
  /** live ์ €๋„ revision ์นด์šดํ„ฐ(sim ์˜ delta revision ๋Œ€์‘ โ€” ์‹œ๊ฐ„์—ฌํ–‰ยทํžˆ์Šคํ† ๋ฆฌ ๋…ธ๋ธŒ ์•ต์ปค). */
@@ -76,6 +100,15 @@ export declare class TwinEngine {
76
100
  /** ์›œ์Šคํƒ€ํŠธ ์”จ์•— โ€” `instances` ์™€ **๊ฐ™์€ ํ‚ค**(๊ฒน์น˜๋ฉด ๋‚จ์˜ ์Šค๋ƒ…์ƒท์œผ๋กœ ์žฌ๊ณ ๊ฐ€ ์„ž์ธ๋‹ค). */
77
101
  static recovered: Record<string, any>;
78
102
  static TICK_MS: number;
103
+ /** ๋ถ€ํŒ… ๋•Œ ํŠธ์œˆ ํ•˜๋‚˜๋ฅผ ๋˜์‚ด๋ฆฐ ๋’ค ๋ฃจํ”„๋ฅผ ๋น„์›Œ ์ฃผ๋Š” ์‹œ๊ฐ„(ms) โ€” ๊ทธ ์‚ฌ์ด ๋„์ฐฉํ•œ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋œ๋‹ค. */
104
+ static BOOT_YIELD_MS: number;
105
+ private static tickPhase;
106
+ /**
107
+ * ํฉ์–ด์ง„ ์ฒซ ๋ฐœํ™” ๋’ค ์ฃผ๊ธฐ ํ‹ฑ. **ํ•ธ๋“ค์€ ํ•ญ์ƒ ์ง„์งœ ํƒ€์ด๋จธ**๋‹ค โ€” ์ •์ง€ํ•˜๋Š” ์ชฝ์ด `clearInterval(inst.timer)`
108
+ * ํ•˜๋‚˜๋กœ ๋๋‚ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฒซ ๋ฐœํ™” ์ „์—๋Š” ๊ทธ `setTimeout` ์„, ์ดํ›„์—๋Š” `setInterval` ์„ ๊ฐ™์€ ์ž๋ฆฌ์— ๋‘”๋‹ค
109
+ * (๊ฐ์‹ผ ๊ฐ์ฒด๋ฅผ ์ฃผ๋ฉด `clearInterval` ์ด ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š๊ณ  ํŠธ์œˆ์ด ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค โ€” ์กฐ์šฉํ•œ ๊ฒฐํ•จ์ด ๋œ๋‹ค).
110
+ */
111
+ private static startTickTimer;
79
112
  /** ๊ตถ๊น€ ๋ฌธํ„ฑ โ€” ํ‹ฑ ๊ฐ„๊ฒฉ์˜ ๋ฐฐ์ˆ˜(1์ดˆ ๊ฐ„๊ฒฉ์ด๋ฉด 5์ดˆ). ์ด ์‹œ๊ฐ„๋งŒํผ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ฉˆ์ถ˜๋‹ค. */
80
113
  static STARVE_FACTOR: number;
81
114
  /** ์—ฐ์† ๋ช‡ ๋ฒˆ์ด๋ฉด ๋ฉˆ์ถ”๋‚˜ โ€” 3๋ฒˆ์ด๋ฉด 15์ดˆ๋ฅผ ๊ตถ๊ธด ์…ˆ์ด๊ณ , ๊ทธ๊ฑด ์šฐ์—ฐ์ด ์•„๋‹ˆ๋‹ค. */
@@ -93,6 +126,44 @@ export declare class TwinEngine {
93
126
  static CHAIN_KEEP: number;
94
127
  static SNAPSHOT_TTL_S: number;
95
128
  static CHECKPOINT_MS: number;
129
+ /**
130
+ * **์ €๋„ ๋ณด์กด โ€” ์ง€์šฐ๋Š” ๊ฒƒ์€ ์„ ์–ธ์ด ์žˆ์„ ๋•Œ๋งŒ ํ•œ๋‹ค.**
131
+ *
132
+ * โ”€โ”€ ์™œ ํ•„์š”ํ•œ๊ฐ€ (2026-08-22 ์‹ค์ธก) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
133
+ * ๊ฐœ๋ฐœ ์ €๋„์ด ์‹œ๊ฐ„๋‹น **581,794ํ–‰ ยท 0.85GB** ๋กœ ์ž๋ž๋‹ค(ํ•˜๋ฃจ 20GB). ๋ฐ๋ชจ MES ํŠธ์œˆ ์…‹์ด ์ „์ฒด์˜ **97%**
134
+ * ๋ฅผ ๋งŒ๋“ค๊ณ  ์ง€์šฐ๋Š” ๊ฒƒ์ด ์—†์—ˆ๋‹ค. ์˜ค๋Š˜ ๊ณ ์นœ ๊ฒƒ๋“ค์€ ใ€Œ๊ทธ ํฌ๊ธฐ์—์„œ๋„ ์งˆ์˜๊ฐ€ ๋น ๋ฅด๊ฒŒใ€์ด๊ณ , **ํฌ๊ธฐ ์ž์ฒด๋ฅผ
135
+ * ์ค„์ด๋Š” ๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„ ์—†์—ˆ๋‹ค.** ๊ทธ๋Ÿฌ๋ฉด ๋ฉฐ์น ๋งˆ๋‹ค ๊ฐ™์€ ์ž๋ฆฌ๋กœ ๋Œ์•„์˜จ๋‹ค.
136
+ *
137
+ * โ”€โ”€ ๊ทธ๋Ÿฐ๋ฐ ์ €๋„์„ ์ง€์šฐ๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์„ ์žƒ๋Š” ์ผ์ด๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
138
+ * ๊ทธ๋ž˜์„œ ์„ธ ๊ทœ์œจ์„ ์ง€ํ‚จ๋‹ค.
139
+ *
140
+ * โ‘  **์„ ์–ธ์ด ์—†์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค.** ๊ธฐ๋ณธ๊ฐ’์€ ์—†์Œ์ด๋‹ค โ€” ์กฐ์šฉํžˆ ์ง€์šฐ๋Š” ํŽธ์ด ์กฐ์šฉํžˆ ์Œ“๋Š”
141
+ * ๊ฒƒ๋ณด๋‹ค ๋‚˜์˜๋‹ค. ์ง€์šฐ๋Š” ๊ฒƒ์€ ์‚ฌ๋žŒ์ด ์ •ํ•œ๋‹ค.
142
+ * โ‘ก **์ฒดํฌํฌ์ธํŠธ๊ฐ€ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒํผ๋งŒ.** ์Šค๋ƒ…์ƒท์ด ์—†๊ฑฐ๋‚˜ ๊ทธ ๋ฆฌ๋น„์ „์„ ๋„˜๋Š” ์ž๋ฆฌ๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
143
+ * ์ฃผ์„์ด ใ€Œ๋งŒ๋ฃŒ ์‹œ ์ €๋„ replay ํด๋ฐฑใ€์ด๋ผ๊ณ  ์ ์–ด ๋‘” ๊ทธ๋Œ€๋กœ โ€” ์Šค๋ƒ…์ƒท์ด ์‚ฌ๋ผ์ง€๋ฉด ์ €๋„์ด **์œ ์ผํ•œ**
144
+ * ๋ณต๊ตฌ ์ˆ˜๋‹จ์ด๋ฏ€๋กœ, ๋‘˜์„ ํ•จ๊ป˜ ์žƒ์œผ๋ฉด ๊ทธ ํŠธ์œˆ์˜ ์ƒํƒœ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค.
145
+ * โ‘ข **์ง€์šด ๊ฒƒ์„ ๋งํ•œ๋‹ค.** ๋ช‡ ๊ฑด์„ ์–ด๋А ์‹œ๊ฐ๊นŒ์ง€ ์ง€์› ๋Š”์ง€ ๋กœ๊ทธ์— ๋‚จ๊ธด๋‹ค. ์กฐ์šฉํžˆ ์ค„์–ด๋“  ์ €๋„์€
146
+ * ใ€Œ์—†์—ˆ๋˜ ์ผใ€๊ณผ ๊ตฌ๋ณ„๋˜์ง€ ์•Š๋Š”๋‹ค.
147
+ *
148
+ * ๊ทธ๋ฆฌ๊ณ  ๋ณด์กด ๊ธฐ๊ฐ„์€ **์Šค๋ƒ…์ƒท TTL(7์ผ)๋ณด๋‹ค ์งง์„ ์ˆ˜ ์—†๋‹ค.** ๋” ์งง์œผ๋ฉด ์Šค๋ƒ…์ƒท์ด ์‚ด์•„ ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์ด
149
+ * ๊ฐ€๋ฆฌํ‚ค๋Š” ์•ž์ชฝ ์ €๋„์ด ์—†๋Š” ๊ตฌ๊ฐ„์ด ์ƒ๊ธฐ๊ณ , ์‹œ๊ฐ„์—ฌํ–‰ยท๊ณ„๋ณด ์ถ”์ ์ด ๊ทธ ๊ตฌ๊ฐ„์—์„œ ์กฐ์šฉํžˆ ๋นˆ๋‹ค.
150
+ */
151
+ static JOURNAL_RETENTION_DAYS?: number;
152
+ /**
153
+ * **๋„๋ฉ”์ธ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ณด์กด ๊ธฐ๊ฐ„์„ ์•ฑ์ด ๋‹ตํ•œ๋‹ค** โ€” ์—”์ง„์€ ๊ทธ ๊ฐ’์ด ์–ด๋””์„œ ์˜ค๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค.
154
+ *
155
+ * ๋ณด์กด ๊ธฐ๊ฐ„์€ ํ…Œ๋„ŒํŠธ์˜ ์ •์ฑ…์ด๋‹ค: ํ•œ ๊ณ ๊ฐ์€ 30์ผ์ด ํ•„์š”ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ณ ๊ฐ์€ 7์ผ์ด๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—”์ง„์ด
156
+ * `Setting` ์„ ์ฝ๊ฒŒ ๋งŒ๋“ค๋ฉด **์—”์ง„์ด ํ™”๋ฉด ๊ด€์‹ฌ์‚ฌ๋ฅผ ์•Œ๊ฒŒ ๋œ๋‹ค** โ€” ๋ฐฉํ–ฅ์ด ๊ฑฐ๊พธ๋กœ๋‹ค(์—”์ง„์€ ์ปค๋„์˜ ํ˜ธ์ŠคํŠธ์ด๊ณ 
157
+ * ๊ทธ ์œ„์— ์–ด๋–ค ํ™”๋ฉด์ด ์žˆ๋Š”์ง€ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค).
158
+ *
159
+ * ๊ทธ๋ž˜์„œ ์‹œ์ž„์„ ๋‘”๋‹ค. ์•ฑ์ด ์ด ํ•จ์ˆ˜๋ฅผ ์‹ฌ๊ณ , ๊ทธ ์•ˆ์—์„œ `Setting` ์ด๋“  ๋‹ค๋ฅธ ๋ฌด์—‡์ด๋“  ์ฝ๋Š”๋‹ค. ์‹ฌ์ง€ ์•Š์œผ๋ฉด
160
+ * `JOURNAL_RETENTION_DAYS`(์„ค์ • ํŒŒ์ผ์—์„œ ์˜จ ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ณธ๊ฐ’)๊ฐ€ ๋‹ตํ•œ๋‹ค.
161
+ *
162
+ * `undefined` ๋ฅผ ๋Œ๋ ค์ฃผ๋ฉด **๊ทธ ๋„๋ฉ”์ธ์€ ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค** โ€” ใ€Œ๋ชจ๋ฅธ๋‹คใ€๋ฅผ ใ€Œ์ง€์›Œ๋„ ๋œ๋‹คใ€๋กœ ์ฝ์ง€ ์•Š๋Š”๋‹ค.
163
+ */
164
+ static retentionDaysOf?: (domainId: string) => Promise<number | undefined>;
165
+ static RETENTION_SWEEP_MS: number;
166
+ private static retentionTimer?;
96
167
  private static checkpointTimer?;
97
168
  /** ์ตœ์‹  ์Šค๋ƒ…์ƒท์„ cache-service ์— ์ฒดํฌํฌ์ธํŠธ(๋„๋ฉ”์ธ+instanceId ํ‚ค). display-onlyยท๋น„์ฐจ๋‹จยท์˜ค๋ฅ˜ํก์ˆ˜. */
98
169
  static persistSnapshot(domainId: string, instanceId: string): Promise<void>;
@@ -146,6 +217,42 @@ export declare class TwinEngine {
146
217
  private static keepChainPoint;
147
218
  /** ์ด ํŠธ์œˆ ์ €๋„์˜ ๋ ๋ฆฌ๋น„์ „ ยท ์ตœ์‹  ๊ตฌ์กฐ ๋ฆฌ๋น„์ „ โ€” ์Šค๋ƒ…์ƒท์ด ์ง€๊ธˆ์˜ ์‚ฌ์‹ค์ธ์ง€ ๊ฐ€๋ฆฌ๋Š” ๋‘ ๊ฐ’. */
148
219
  private static tipOf;
220
+ /**
221
+ * **์ €๋„์„ ๋ณด์กด ๊ธฐ๊ฐ„๊นŒ์ง€๋งŒ ๋‘”๋‹ค** โ€” ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒํผ๋งŒ ์ง€์šด๋‹ค.
222
+ *
223
+ * ํ•œ ์ธ์Šคํ„ด์Šค์—์„œ ์ง€์šฐ๋Š” ์กฐ๊ฑด์€ **๋‘˜ ๋‹ค** ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.
224
+ *
225
+ * ยท `createdAt` ์ด ๋ณด์กด ๊ธฐ๊ฐ„๋ณด๋‹ค ์˜ค๋ž˜๋๋‹ค โ€” **ํ–‰์ด ์“ฐ์ธ ์‹ค์ œ ์‹œ๊ฐ**์ด ๊ธฐ์ค€์ด๋‹ค
226
+ * ยท `revision` ์ด **์ฒดํฌํฌ์ธํŠธ ๋ฆฌ๋น„์ „ ์ดํ•˜**๋‹ค โ€” ๊ทธ ์•ž์€ ์Šค๋ƒ…์ƒท์ด ๋Œ€์‹ ํ•œ๋‹ค
227
+ *
228
+ * โ”€โ”€ ์™œ `eventTime` ์ด ์•„๋‹ˆ๋ผ `createdAt` ์ธ๊ฐ€ (2026-08-22 ์‹ค์ธก์œผ๋กœ ๊ณ ์นจ) โ”€โ”€โ”€โ”€
229
+ * ์ฒ˜์Œ์— `eventTime` ์œผ๋กœ ์ ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์€ **ํŠธ์œˆ์˜ ์‹œ๊ณ„**๋‹ค โ€” ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์ž๊ธฐ ์‹œ๊ณ„๋กœ ์‚ฌ๊ฑด์„ ์ฐ๊ณ ,
230
+ * ๊ทธ ์‹œ๊ณ„๋Š” ์‹ค์ œ ์‹œ๊ฐ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์•ž์„œ๊ฑฐ๋‚˜ ๋’ค์„ ๋‹ค. ์‹ค์ธก:
231
+ *
232
+ * order-check ๊ฐ€์žฅ ๋Šฆ์€ eventTime = 2027-06-08 โ† ์‹ค์ œ ์‹œ๊ฐ๋ณด๋‹ค 10๊ฐœ์›” ์•ž
233
+ * hatio-mx2 2026-01-01 ~ ์ง€๊ธˆ โ† 7๊ฐœ์›”์น˜๋ฅผ ํ•œ ๋ฒˆ์— ์ง€์šฐ๊ฒŒ ๋œ๋‹ค
234
+ *
235
+ * ์ฆ‰ ใ€Œ7์ผใ€์ด ํŠธ์œˆ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋œป์ด ๋œ๋‹ค: ์‹œ๊ณ„๊ฐ€ ์•ž์„  ํŠธ์œˆ์€ ์˜์›ํžˆ ์ง€์›Œ์ง€์ง€ ์•Š๊ณ , ๊ณผ๊ฑฐ๋ถ€ํ„ฐ ์ฐ์€ ํŠธ์œˆ์€
236
+ * ๊ฑฐ์˜ ์ „๋ถ€๊ฐ€ ํ•œ ๋ฒˆ์— ์ง€์›Œ์ง„๋‹ค. **๋ณด์กด์€ ์ €์žฅ ๋‚˜์ด์˜ ๋ฌธ์ œ**์ด๊ณ  ์ €์žฅ ๋‚˜์ด๋Š” ์‹ค์ œ ์‹œ๊ณ„๋‹ค.
237
+ *
238
+ * `createdAt` ์€ ๊ทธ ํ–‰์ด DB ์— ์“ฐ์ธ ์‹œ๊ฐ์ด๊ณ  1,599๋งŒ ํ–‰ ์ „๋ถ€ ์ฑ„์›Œ์ ธ ์žˆ๋‹ค(ํ™•์ธํ•จ). ๋„๋ฉ”์ธ ์‹œ๊ฐ์„
239
+ * ์ •์ฑ…์— ์“ฐ์ง€ ์•Š๋Š”๋‹ค โ€” ๊ทธ ๋‘˜์„ ์„ž์œผ๋ฉด ์‹œ๋ฎฌ๊ณผ ๋ฏธ๋Ÿฌ์—์„œ ๊ฐ™์€ ์„ค์ •์ด ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
240
+ *
241
+ * ์Šค๋ƒ…์ƒท์ด ์—†์œผ๋ฉด **๊ทธ ์ธ์Šคํ„ด์Šค๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.** ์ €๋„์ด ์œ ์ผํ•œ ๋ณต๊ตฌ ์ˆ˜๋‹จ์ธ ์ƒํƒœ์ด๋ฏ€๋กœ, ์ง€์šฐ๋ฉด
242
+ * ๊ทธ ํŠธ์œˆ์˜ ์ƒํƒœ๋ฅผ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค. ใ€Œ์ง€์šธ ์ˆ˜ ์—†์—ˆ๋‹คใ€๋Š” ์‚ฌ์‹ค๋„ ํ•จ๊ป˜ ์„ผ๋‹ค โ€” ์กฐ์šฉํžˆ ๋„˜๊ธฐ๋ฉด ใ€Œ๋ณด์กด์ด
243
+ * ๋„๋Š”๋ฐ ์™œ ์•ˆ ์ค„์–ด๋“œ๋‚˜ใ€๊ฐ€ ๋œ๋‹ค.
244
+ *
245
+ * `createdAt` ์ด ๋นˆ ์˜› ํ–‰์€ **์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค**(์‹œ๊ฐ์„ ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ใ€Œ์˜ค๋ž˜๋๋‹คใ€๋กœ ์ฝ์ง€ ์•Š๋Š”๋‹ค).
246
+ *
247
+ * ๋“œ๋ผ์ด๋ฒ„ ๋‹ค์„ฏ์„ ๋‹ค ์ง€๋‚˜์•ผ ํ•˜๋ฏ€๋กœ raw SQL ์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค โ€” ์กฐ๊ฑด ์‚ญ์ œ๋Š” ์ฟผ๋ฆฌ๋นŒ๋”๊ฐ€ ์ด์‹ํ•œ๋‹ค.
248
+ */
249
+ static pruneJournal(domainId: string): Promise<{
250
+ deleted: number;
251
+ instances: number;
252
+ skipped: string[];
253
+ }>;
254
+ /** ๋ณด์กด ์ •๋ฆฌ ์ฃผ๊ธฐ ๊ธฐ๋™(1ํšŒ) โ€” ์„ ์–ธ์ด ์—†์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. */
255
+ static startRetentionLoop(domainId: string): void;
149
256
  /** ์ฒดํฌํฌ์ธํŠธ ๋ฃจํ”„ ๊ธฐ๋™(1ํšŒ) โ€” ๋ผ์ด๋ธŒ ์ธ์Šคํ„ด์Šค๋“ค์˜ ์ตœ์‹  ์Šค๋ƒ…์ƒท์„ ์ฃผ๊ธฐ ์˜์†. */
150
257
  static startCheckpointLoop(): void;
151
258
  /**
@@ -164,7 +271,7 @@ export declare class TwinEngine {
164
271
  *
165
272
  * โ”€โ”€ ๋ชจ๋“œ๋ฅผ ์ง€์–ด๋‚ด์ง€ ์•Š๋Š”๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
166
273
  * ๋ฏธ๋Ÿฌ์˜€๋˜ ํŠธ์œˆ์„ ์‹œ๋ฎฌ๋กœ ๋˜์‚ด๋ฆฌ๋ฉด **์—†๋˜ ์›€์ง์ž„์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค**(๊ด€์ธก ํŠธ์œˆ์ด ์Šค์Šค๋กœ ๋ฌผ๊ฑด์„ ์˜ฎ๊ธด๋‹ค).
167
- * ๊ทธ๋ž˜์„œ ์„ ์–ธ๋œ `realityMode` ๊ทธ๋Œ€๋กœ ๋˜์‚ด๋ฆฐ๋‹ค โ€” ๋ฏธ๋Ÿฌ๋Š” ๊ด€์ธก ๊ตฌ๋™์œผ๋กœ, ์‹œ๋ฎฌ์€ ์‹œ๋ฎฌ๋กœ.
274
+ * ๊ทธ๋ž˜์„œ ์„ ์–ธ๋œ `restartPolicy` ๊ทธ๋Œ€๋กœ ๋˜์‚ด๋ฆฐ๋‹ค โ€” ๋ฏธ๋Ÿฌ๋Š” ๊ด€์ธก ๊ตฌ๋™์œผ๋กœ, ์‹œ๋ฎฌ์€ ์‹œ๋ฎฌ๋กœ.
168
275
  *
169
276
  * โ”€โ”€ ๋˜์‚ด๋ฆด ์ˆ˜ ์—†์œผ๋ฉด ๊ทธ๋ ‡๊ฒŒ ์ ๋Š”๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
170
277
  * ์‹คํŒจ๋ฅผ ์‚ผํ‚ค๋ฉด ๋“ฑ๋ก๋ถ€๊ฐ€ ๊ณ„์† `running` ์ด๋ผ ๋งํ•œ๋‹ค โ€” ์šฐ๋ฆฌ๊ฐ€ ๊ณ ์น˜๋ ค๋˜ ๊ทธ ๊ฑฐ์ง“๋ง์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‹คํŒจํ•œ
@@ -249,7 +356,31 @@ export declare class TwinEngine {
249
356
  * ์ •์ƒ ๊ทœ๋ชจ์—์„œ ์„œ๋กœ ๋ฐ€์–ด๋‚ด๋ฉฐ ์บ์‹œ๊ฐ€ ๋ฌด์˜๋ฏธํ•ด์ง„๋‹ค(๊ทธ๊ฒŒ ๋” ๋‚˜์˜๋‹ค: ์กฐ์šฉํžˆ ๋А๋ ค์ง„๋‹ค).
250
357
  */
251
358
  private static readonly MEASURED_MAX;
359
+ /** ์ด ํŠธ์œˆ์ด ์ด๋ ฅ์—์„œ ๋ฐฐ์šด ์–‘ํ’ˆ๋ฅ  โ€” ์†Œ์š”์™€ **๊ฐ™์€ ํด๋“œยท๊ฐ™์€ ์บ์‹œ**์—์„œ ์˜จ๋‹ค(์ €๋„์„ ๋‘ ๋ฒˆ ์ ‘์ง€ ์•Š๋Š”๋‹ค). */
360
+ private static measuredYield;
252
361
  private static measuredEstimator;
362
+ /**
363
+ * **์›๋ณธ์ด ์„ ์–ธํ•œ ์ž๊ทน์„ ์‹ฃ๋Š”๋‹ค** โ€” ์žฌ๊ธฐ๋™ํ•ด๋„ ์‚ด์•„ ์žˆ๊ฒŒ (2026-08-19).
364
+ *
365
+ * โ”€โ”€ ๋ฌด์—‡์ด ๋‚ฌ๋‚˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
366
+ * ๋ฐ๋ชจ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์‹œ๋“œ ์ฝ”๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์‹ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํŠธ์œˆ์„ ์žฌ๊ธฐ๋™ํ•˜๋ฉด ์ž๊ทน์ด ์‚ฌ๋ผ์ง€๊ณ  ๊ตฌ์กฐ๋งŒ
367
+ * ์„œ ์žˆ๋Š” ํŠธ์œˆ์ด ๋‚จ์•˜๋‹ค(์ž‘์—… 0ยท์˜ค๋” 0) โ€” ใ€Œ์‚ด์•„ ์žˆ๋Š” ๋ฐ๋ชจใ€๊ฐ€ **์ฒซ ์žฌ๊ธฐ๋™๊นŒ์ง€๋งŒ** ์‚ด์•˜๋‹ค.
368
+ *
369
+ * ์ž๊ทน์˜ ์ง‘์€ **์›๋ณธ**์ด๋‹ค(`TwinReference.connectionConfig.scenario`, ADR-0029 ยท
370
+ * `plans/simulator-as-source.md` ยง4): ๋ฌด์—‡์ด ๋“ค์–ด์˜ค๊ณ  ๋ฌด์Šจ ์ฃผ๋ฌธ์ด ๋‚˜๋Š”์ง€๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์ •ํ•˜๋Š” ์‚ฌ์‹ค์ด๊ณ 
371
+ * ํŠธ์œˆ์€ ๋ฐ˜์˜ํ•œ๋‹ค. ํŠธ์œˆ์— ์ƒˆ ์ถ•์„ ๋งŒ๋“ค๋ฉด ADR-0029 ๊ฐ€ ๊ฑท์–ด๋‚ด์•ผ ํ•  ํ‘œ๋ฉด์ด ํ•˜๋‚˜ ๋Š˜์–ด๋‚œ๋‹ค.
372
+ *
373
+ * ํŒ์ •์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ํ•œ๋‹ค(`planStimulus`) โ€” ๋ฏธ๋Ÿฌ์— ์‹ฃ์ง€ ์•Š๊ณ , ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ์„ ์–ธ์€ ํƒœ์šฐ์ง€ ์•Š๊ณ 
374
+ * (๊ทธ ์ด๋ ฅ์ด ์žˆ๋‹ค: ์ž˜๋ชป๋œ ์„ ์–ธ ํ•˜๋‚˜๊ฐ€ ๋‹ค์Œ ํ‹ฑ์—์„œ ์„œ๋ฒ„๋ฅผ ๋‚ด๋ ธ๋‹ค), ๋ชป ์‹ค์€ ์ด์œ ๋Š” **๋งํ•œ๋‹ค.**
375
+ */
376
+ private static installStimulus;
377
+ /**
378
+ * ์ž๊ทน์„ **์›๋ณธ์— ์„ ์–ธํ•œ๋‹ค** โ€” ํ”„๋กœ๋น„์ €๋‹ยท๋ฐ๋ชจ ์‹œ๋“œ๊ฐ€ ๋ถ€๋ฅด๋Š” ๋ฌธ.
379
+ *
380
+ * ํŠธ์œˆ์ด ์•„๋‹ˆ๋ผ ์›๋ณธ์— ์ ๋Š” ์ด์œ ๋Š” ์œ„์™€ ๊ฐ™๋‹ค(ADR-0029). ์›๋ณธ ํ–‰์ด ์—†์œผ๋ฉด ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค โ€” ์–ด๋–ค ์›๋ณธ์—์„œ
381
+ * ์˜จ ํŠธ์œˆ์ธ์ง€ ๋ชจ๋ฅด๋Š” ์ฑ„ ์ž๊ทน์„ ์ง€์–ด ๋ถ™์ด๋ฉด, ๊ทธ ์ž๊ทน์ด ์–ด๋””์„œ ์™”๋Š”์ง€ ์•„๋ฌด๋„ ๋˜์งš์„ ์ˆ˜ ์—†๋‹ค.
382
+ */
383
+ static declareStimulus(domainId: string, instanceId: string, scenario: any): Promise<boolean>;
253
384
  /**
254
385
  * ์ด ํŠธ์œˆ์ด **์ด๋ ฅ์—์„œ ์‹œ๊ฐ„์„ ๋ฐฐ์šด ์ž‘์—… ์ข…๋ฅ˜๋“ค** โ€” ์žฌ๊ธฐ๋™์—๋„ ๋‚จ๋Š” ๊ทผ๊ฑฐ.
255
386
  *
@@ -313,7 +444,7 @@ export declare class TwinEngine {
313
444
  * ์ปค๋„์ด ๊ทธ ๋ฌธ์„ ์—ด์–ด ๋‘์ง€ ์•Š์•˜์œผ๋ฉด ๊ทธ ์‚ฌ์‹ค๋„ ๋งํ•œ๋‹ค: ๊ทธ ํŠธ์œˆ์€ ์žฌ๊ธฐ๋™๋งˆ๋‹ค ์—ด๋ฆฐ ๊ตฌ๊ฐ„์„ ์žƒ๋Š”๋‹ค.
314
445
  */
315
446
  private static seedLiveContinuity;
316
- static start(id: string, domainId: string, kind: string, model: TwinModelDef, realityMode?: RealityMode, purpose?: string, resumeFrom?: number): InstanceRuntime;
447
+ static start(id: string, domainId: string, kind: string, model: TwinModelDef, restartPolicy?: RestartPolicy, purpose?: string, resumeFrom?: number): InstanceRuntime;
317
448
  /**
318
449
  * live-๋ชจ๋“œ ๊ธฐ๋™ โ€” **๊ด€์ธก ๋ชจ๋“œ ์ปค๋„**๋กœ ์‹ค ์ด๋ฒคํŠธ๋ฅผ ๋ฏธ๋Ÿฌํ•œ๋‹ค(ํ†ตํ•ฉ P2).
319
450
  *
@@ -361,33 +492,94 @@ export declare class TwinEngine {
361
492
  static withSpaceTimeBase(model: TwinModelDef, domainId: string, spaceId?: string): Promise<TwinModelDef>;
362
493
  static startLive(id: string, domainId: string, kind: string, model: TwinModelDef): InstanceRuntime;
363
494
  /**
364
- * live ์ด๋ฒคํŠธ ์ธ์ œ์ŠคํŠธ โ€” projector ๊ตฌ๋™ + data(tag) ๋ฐฉ์†ก(ํ๋ฃจํ”„์˜ ์ธ๋ฐ”์šด๋“œ ๋„์ฐฉ ์ง€์ , command-routing ยง8.2).
495
+ * live ์ด๋ฒคํŠธ ์ธ์ œ์ŠคํŠธ โ€” projector ๊ตฌ๋™ + data(tag) ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…(ํ๋ฃจํ”„์˜ ์ธ๋ฐ”์šด๋“œ ๋„์ฐฉ ์ง€์ , command-routing ยง8.2).
365
496
  * reference ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋‚ธ records โ†’ ์ปค๋„ face2-adapter.ingest โ†’ CanonicalEnvelope ๋ฅผ ์—ฌ๊ธฐ๋กœ ๋ฐ€์–ด๋„ฃ๋Š”๋‹ค.
366
497
  * (State ์ฑ„๋„ ๋ธํƒ€/์ €๋„ ๊ฒฐ์„ ์€ ํ›„์† โ€” ์Šค์ผˆ๋ ˆํ†ค์€ data(tag) ๋ฏธ๋Ÿฌ ์ค‘์‹ฌ.)
498
+ *
499
+ * โ”€โ”€ ๋„ฃ์€ ์ˆ˜๋ฅผ **๋‹ตํ•œ๋‹ค** (2026-08-20) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
500
+ * ํŠธ์œˆ์ด ๋ผ์ด๋ธŒ๋กœ ๋Œ์ง€ ์•Š์œผ๋ฉด ์—ฌ๊ธฐ์„œ ๋ด‰ํˆฌ๋ฅผ ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๊ฒƒ ์ž์ฒด๋Š” ๋งž๋‹ค(๋„ฃ์„ ์ปค๋„์ด ์—†๋‹ค). ๋ฌธ์ œ๋Š”
501
+ * **์กฐ์šฉํžˆ** ๋ฒ„๋ฆฐ ๊ฒƒ์ด์—ˆ๋‹ค: ํŠธ์œˆ์ด ๋ฉˆ์ถ˜ ๋’ค์—๋„ ํ”ผ๋“œ๋Š” ๋‚จ์•„ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‚˜๋ฅด๊ณ , ์œ ์ž… ์žฅ๋ถ€๋Š” ๊ทธ๊ฒƒ์„
502
+ * ใ€Œํ†ต๊ณผใ€๋กœ ์…Œ๋‹ค. ํ™”๋ฉด์€ ๋ฉˆ์ถ˜ ํŠธ์œˆ ์˜†์— ใ€Œ150 ํ†ต๊ณผ ยท 100%ใ€๋ผ๊ณ  ์ ์—ˆ๋‹ค โ€” ์‚ฌ์‹ค์ด ์‚ฌ๋ผ์ง€๋Š” ๋™์•ˆ
503
+ * ํ™”๋ฉด์ด ์•ˆ์‹ฌ์‹œํ‚จ ๊ฒƒ์ด๋‹ค.
504
+ *
505
+ * ๊ทธ๋ž˜์„œ **๋„ฃ์€ ์ˆ˜๋ฅผ ๋Œ๋ ค์ค€๋‹ค.** ๋ถ€๋ฅด๋Š” ์ชฝ์ด ์ œ์‹œ ์ˆ˜์™€ ๊ฒฌ์ฃผ์–ด ๋ฒ„๋ ค์ง„ ์ˆ˜๋ฅผ ์žฅ๋ถ€์— ์ ๋Š”๋‹ค. ๋ฐ˜ํ™˜์„
506
+ * ๋ฌด์‹œํ•˜๋Š” ํ˜ธ์ถœ๋ถ€๋Š” ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•œ๋‹ค(์ „๊ณผ ๊ฐ™๋‹ค).
367
507
  */
368
- static ingestLive(domainId: string, id: string, envelopes: CanonicalEnvelope[]): void;
508
+ static ingestLive(domainId: string, id: string, envelopes: CanonicalEnvelope[]): number;
369
509
  /**
370
- * ๊ตฌ๊ฐ„ ์„ฑ๊ณผ ๋ฐฉ์†ก์€ **์—†์•ด๋‹ค**(2026-08-06). ์นด๋“œ๊ฐ€ `twinKpi` ๋ฅผ ์ง์ ‘ ๋ฌป๋Š”๋‹ค.
510
+ * ๊ตฌ๊ฐ„ ์„ฑ๊ณผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์€ **์—†์•ด๋‹ค**(2026-08-06). ์นด๋“œ๊ฐ€ `twinKpi` ๋ฅผ ์ง์ ‘ ๋ฌป๋Š”๋‹ค.
371
511
  *
372
- * ์™œ: ์นด๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„(๊ณต๊ฐ„ยทํŠธ์œˆยท๊ตฌ์—ญยท์ž๋ฆฌยท์„ค๋น„)์— ๋ถ™์ด๋ ค๋ฉด ๋ฐฉ์†ก์œผ๋กœ๋Š” ํƒœ๊ทธ๊ฐ€ ํŠธ์œˆ๋‹น 1,200๊ฐœ๊ฐ€ ๋˜๊ณ ,
512
+ * ์™œ: ์นด๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„(๊ณต๊ฐ„ยทํŠธ์œˆยท๊ตฌ์—ญยท์ž๋ฆฌยท์„ค๋น„)์— ๋ถ™์ด๋ ค๋ฉด ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์œผ๋กœ๋Š” ํƒœ๊ทธ๊ฐ€ ํŠธ์œˆ๋‹น 1,200๊ฐœ๊ฐ€ ๋˜๊ณ ,
373
513
  * **๋ชจ๋ธ์— ์นด๋“œ๋ฅผ ํ•˜๋‚˜๋„ ์•ˆ ๋†“์•„๋„** 30์ดˆ๋งˆ๋‹ค ํŠธ์œˆ๋งˆ๋‹ค ์ €๋„์„ ์ ‘์—ˆ๋‹ค. ์งˆ์˜๋กœ ๋ฐ”๊พธ๋‹ˆ ๋ณด๊ณ  ์žˆ๋Š” ์นด๋“œ
374
514
  * ์ˆ˜๋งŒํผ๋งŒ ๋“ค๊ณ , ๊ฐ™์€ (๋Œ€์ƒยท์ฐฝยท์ถ•) ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค.
375
515
  *
376
516
  * ๋ค์œผ๋กœ ์งˆ์˜๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋‘˜ ์ƒ๊ฒผ๋‹ค โ€” **๊ณผ๊ฑฐ ์‹œ๊ฐ**(`toTime`)๊ณผ **๊ณต๊ฐ„ ๋‹จ์œ„ ํ•ฉ์‚ฐ**(์—ฌ๋Ÿฌ ํŠธ์œˆ์„
377
- * ํ•œ ๋ฒˆ์— ์ ‘๊ธฐ). ๋ฐฉ์†ก ๋ฃจํ”„๋Š” ํŠธ์œˆ๋ณ„์ด๋ผ ๋‘˜ ๋‹ค ๋ชป ํ–ˆ๋‹ค.
517
+ * ํ•œ ๋ฒˆ์— ์ ‘๊ธฐ). ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ๋ฃจํ”„๋Š” ํŠธ์œˆ๋ณ„์ด๋ผ ๋‘˜ ๋‹ค ๋ชป ํ–ˆ๋‹ค.
378
518
  *
379
519
  * ์ถ•์„ ๋‚˜๋ˆ ๋„ ํด๋“œ ๋น„์šฉ์ด ๊ฐ™๋‹ค๋Š” ์‹ค์ธก์ด ๊ทผ๊ฑฐ๋‹ค(`test/kpi-query-bench.test.ts`).
380
520
  */
381
- /** ๋ฐฉ์†ก ๋ณ‘ํ•ฉ ์ฃผ๊ธฐ(ms) โ€” ๋ฐฉ์†ก๋ฅ  ์ƒํ•œ. ์ธ์ œ์ŠคํŠธ๊ฐ€ ์•„๋ฌด๋ฆฌ ๋นจ๋ผ๋„ ์ด ์ฃผ๊ธฐ๋กœ๋งŒ ๋ฐฉ์†ก. */
521
+ /**
522
+ * ๋ช‡ ์ฐฝ๋งˆ๋‹ค ํ•œ ๋ฒˆ์€ **์ „๋ถ€** ๋งŒ๋“œ๋‚˜ โ€” ์‚ฌ๊ฑด ์—†์ด ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ์ž๋ฆฌ์— ๋Œ€ํ•œ ๊ทธ๋ฌผ.
523
+ *
524
+ * 25 ์ฐฝ์ด๋ฉด ๊ธฐ๋ณธ ์ฃผ๊ธฐ์—์„œ 5์ดˆ๋‹ค. ๋ณด์žฅ์ด ์•„๋‹ˆ๋ผ ๊ทธ๋ฌผ์ด๋‹ค(์œ„ `publishEntityData` ์ฃผ์„).
525
+ */
526
+ static FULL_BROADCAST_EVERY: number;
527
+ /** ์ „๋ถ€ ๋งŒ๋“  ํšŸ์ˆ˜ โ€” ๋ฒ”์œ„๋ฅผ ์ขํžˆ์ง€ ๋ชปํ•œ ์ฐฝ์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ๊ฐ’์œผ๋กœ ๋‚จ๋Š”๋‹ค. */
528
+ static broadcastFullPasses: number;
529
+ /**
530
+ * ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์„ ๋งŒ๋“  ํšŸ์ˆ˜ ์ „๋ถ€ โ€” **์ „๋ถ€ ๋งŒ๋“  ํšŸ์ˆ˜์˜ ๋ถ„๋ชจ.**
531
+ *
532
+ * ๋ถ„์ž๋งŒ ๋‚ด๋ฉด ใ€Œ์ „๋ถ€ ๋งŒ๋“ค๊ธฐ 1,200ํšŒใ€๊ฐ€ ๋งŽ์€ ๊ฒƒ์ธ์ง€ ์ ์€ ๊ฒƒ์ธ์ง€ ์ฝ์„ ์ˆ˜ ์—†๋‹ค. ์ขํžˆ๊ธฐ๊ฐ€ ๋“ฃ๊ณ  ์žˆ์œผ๋ฉด
533
+ * ์ด ๊ฐ’์˜ `1/FULL_BROADCAST_EVERY` ์ฏค์ด ์ „๋ถ€ ๋งŒ๋“  ํšŸ์ˆ˜์ด๊ณ , ๋‘ ๊ฐ’์ด ๋น„์Šทํ•˜๋ฉด ๋ฒ”์œ„๋ฅผ ๊ฑฐ์˜ ๋ชป ์ขํžŒ
534
+ * ๊ฒƒ์ด๋‹ค(์›์ธ์€ ๋Œ€๊ฐœ ใ€Œ๋ชจ๋ฅธ๋‹คใ€๋กœ ๋–จ์–ด์ง€๋Š” ์‚ฌ๊ฑด์ด๋‹ค).
535
+ */
536
+ static broadcastPasses: number;
537
+ /**
538
+ * ์ด ์ฐฝ์— ๊ฑด๋“œ๋ฆฐ ๋ฌผํ’ˆ์„ ๋ชจ์€๋‹ค โ€” **๋งํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋ฒ”์œ„๋ฅผ ๋ฒ„๋ฆฐ๋‹ค(์ „๋ถ€ ๋งŒ๋“ ๋‹ค).**
539
+ *
540
+ * `events` ๋ฅผ ์ฃผ์ง€ ์•Š์œผ๋ฉด ใ€Œ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹คใ€๋‹ค(๊ตฌ์กฐ ์ „ํ™˜์ฒ˜๋Ÿผ ์ƒํƒœ ์ „๋ฐ˜์ด ๋‹ฌ๋ผ์ง€๋Š” ์ž๋ฆฌ).
541
+ * ํ•œ ์ฐฝ์—์„œ ํ•œ ๋ฒˆ ใ€Œ๋ชจ๋ฅธ๋‹คใ€๊ฐ€ ๋˜๋ฉด ๊ทธ ์ฐฝ์€ ๋๊นŒ์ง€ ๋ชจ๋ฅด๋Š” ์ฑ„๋กœ ๋‘”๋‹ค โ€” ๋’ค์— ์˜จ ์‚ฌ๊ฑด์œผ๋กœ ๋ฒ”์œ„๋ฅผ
542
+ * ๋˜์‚ด๋ฆฌ๋ฉด ์•ž ์‚ฌ๊ฑด์ด ๊ฑด๋“œ๋ฆฐ ๊ฒƒ์„ ๋น ๋œจ๋ฆฐ๋‹ค.
543
+ */
544
+ static markItemsDirty(inst: InstanceRuntime, events?: any[]): void;
545
+ /** ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ๋ณ‘ํ•ฉ ์ฃผ๊ธฐ(ms) โ€” ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…๋ฅ  ์ƒํ•œ. ์ธ์ œ์ŠคํŠธ๊ฐ€ ์•„๋ฌด๋ฆฌ ๋นจ๋ผ๋„ ์ด ์ฃผ๊ธฐ๋กœ๋งŒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…. */
382
546
  static BROADCAST_COALESCE_MS: number;
547
+ /**
548
+ * โ”€โ”€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ์ฃผ๊ธฐ๋Š” **์žฌ ๋ณธ ๋น„์šฉ์— ๋งž์ถ˜๋‹ค** (2026-08-21 ์‹ค์ธก) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
549
+ * ํ•œ ๋ฒˆ์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์€ ์ƒํƒœ ํฌ๊ธฐ์— ๋น„๋ก€ํ•œ๋‹ค(์‹ค์ธก: ๋ฌผํ’ˆ 2,400 ๊ฐœ์ธ ํŠธ์œˆ ํ•˜๋‚˜๊ฐ€ 4.5ms โ€” ์ƒํƒœ ํˆฌ์˜ 1.7ms,
550
+ * payload ๋งŒ๋“ค๊ธฐ 1.8ms, ์‹œ๊ทธ๋‹ˆ์ฒ˜ 1.0ms). ํŠธ์œˆ์ด ์Šค๋ฌด ๊ฐœ๋ฉด 200ms ๋งˆ๋‹ค 90ms ๊ฐ€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์— ๋“ค์–ด๊ฐ€๊ณ ,
551
+ * ๊ทธ ์‹œ๊ฐ„์—๋Š” HTTP ๋„ ๊ตฌ๋…๋„ ์„œ์ง€ ๋ชปํ•œ๋‹ค.
552
+ *
553
+ * ๊ทธ๋ž˜์„œ ํ•œ ์ฐฝ์—์„œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์— ์“ด ์‹œ๊ฐ„์ด ์ฃผ๊ธฐ์˜ ์ผ์ • ๋ชซ์„ ๋„˜์œผ๋ฉด **์ฃผ๊ธฐ๋ฅผ ๋Š˜๋ฆฐ๋‹ค**. ํ™”๋ฉด์€ ์กฐ๊ธˆ ๋Šฆ๊ฒŒ
554
+ * ๊ฐฑ์‹ ๋˜๊ณ (์ตœ์‹ -์ƒํƒœ ์ฑ„๋„์ด๋ผ ๊ฐ’์€ ๋งˆ์ง€๋ง‰ ๊ฒƒ ํ•˜๋‚˜๋ฟ์ด๋ฏ€๋กœ ๋‚ด์šฉ์€ ๊ฐ™๋‹ค), ๋Š˜๋ ธ๋‹ค๋Š” ๊ฒƒ์€ ๊ณ„๊ธฐํŒ์ด
555
+ * ๋งํ•œ๋‹ค(`broadcastCoalesceMs`). ์—ฌ์œ ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์›๋ž˜ ์ฃผ๊ธฐ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
556
+ *
557
+ * ์ด๊ฒƒ์€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ๋น„์šฉ์„ **์ค„์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค** โ€” ๋น„์šฉ์„ ์ค„์ด๋Š” ๊ฒƒ์€ ๋ณ€๊ฒฝ๋ถ„๋งŒ ๋งŒ๋“œ๋Š” ์ผ์ด๊ณ  ๊ทธ๊ฒƒ์€ ๋ณ„
558
+ * ์ž‘์—…์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ทธ๋•Œ๊นŒ์ง€ ํ˜ธ์ŠคํŠธ๊ฐ€ ๊ตถ์ง€ ์•Š๊ฒŒ ์ƒํ•œ์„ ๋‘”๋‹ค.
559
+ */
560
+ static BROADCAST_MAX_COALESCE_MS: number;
561
+ /** ์ฃผ๊ธฐ์˜ ๋ช‡ ๋ชซ๊นŒ์ง€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์— ์จ๋„ ๋˜๋Š”๊ฐ€ โ€” ๋„˜์œผ๋ฉด ์ฃผ๊ธฐ๋ฅผ ๋Š˜๋ฆฐ๋‹ค(์ ˆ๋ฐ˜์ด๋ฉด ๋‚˜๋จธ์ง€ ์ ˆ๋ฐ˜์€ ๋‚จ๊ธด๋‹ค). */
562
+ static BROADCAST_LOAD_RATIO: number;
563
+ /** ์ง€๊ธˆ ์“ฐ๊ณ  ์žˆ๋Š” ์ฃผ๊ธฐ(ms) โ€” ๊ณ„๊ธฐํŒ์ด ์ด ๊ฐ’์„ ์ฝ๋Š”๋‹ค. ๋Š˜์–ด๋‚œ ์ฑ„๋กœ ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋‹ค. */
564
+ static broadcastPeriodMs: number;
565
+ /** ์ฃผ๊ธฐ๋ฅผ ๋Š˜๋ฆฐ ํšŸ์ˆ˜ โ€” ์กฐ์šฉํžˆ ๋Šฆ์ถ”์ง€ ์•Š๋Š”๋‹ค. */
566
+ static broadcastBackoffs: number;
383
567
  private static broadcastTimer?;
384
- /** live ๋ฐฉ์†ก coalescer โ€” dirty ์ธ live ์ธ์Šคํ„ด์Šค๋งŒ ์ฃผ๊ธฐ์ ์œผ๋กœ 1ํšŒ ๋ฐฉ์†ก(entitySigs ๋กœ ๋ณ€๊ฒฝ ์—”ํ‹ฐํ‹ฐ๋งŒ). */
568
+ /** live ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… coalescer โ€” dirty ์ธ live ์ธ์Šคํ„ด์Šค๋งŒ ์ฃผ๊ธฐ์ ์œผ๋กœ 1ํšŒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…(entitySigs ๋กœ ๋ณ€๊ฒฝ ์—”ํ‹ฐํ‹ฐ๋งŒ). */
385
569
  private static ensureBroadcastCoalescer;
386
570
  /**
387
- * dirty ์ธ์Šคํ„ด์Šค ๋ฐฉ์†ก flush(์ฃผ๊ธฐ tick ๋˜๋Š” ๋ช…์‹œ ํ˜ธ์ถœ) โ€” **์‹œ๋ฎฌ๊ณผ ๋ผ์ด๋ธŒ ๋‘˜ ๋‹ค.**
571
+ * ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์— ์“ด ์‹œ๊ฐ„์„ ๋ณด๊ณ  ์ฃผ๊ธฐ๋ฅผ ์ •ํ•œ๋‹ค โ€” **๋Š˜๋ฆฌ๋Š” ๊ฒƒ๋„ ์ค„์ด๋Š” ๊ฒƒ๋„ ๊ฐ’์— ๊ทผ๊ฑฐํ•œ๋‹ค.**
388
572
  *
389
- * ์˜ˆ์ „์—๋Š” ๋ผ์ด๋ธŒ๋งŒ ๋ดค๋‹ค(`mode !== 'live'` ๋ฉด ๊ฑด๋„ˆ๋œ€). ์‹œ๋ฎฌ์€ delta ๋งˆ๋‹ค ๊ณง๋ฐ”๋กœ ๋ฐฉ์†กํ–ˆ๊ณ , ๊ทธ๊ฒƒ์ด
390
- * ํ•œ tick ์—์„œ ์ˆ˜๋ฐฑ ๋ฒˆ ๋ฐ˜๋ณต๋˜๋ฉฐ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋ง‰์•˜๋‹ค(์œ„ `start()` ์ฃผ์„์˜ 35์ดˆ ํ‹ฑ). ๋ฐฉ์†ก์„ ๋ชจ์œผ๋Š”
573
+ * ํ•œ ๋ฒˆ์˜ flush ๊ฐ€ ์ฃผ๊ธฐ์˜ `BROADCAST_LOAD_RATIO` ๋ฅผ ๋„˜๊ฒŒ ์“ฐ๋ฉด ์ฃผ๊ธฐ๋ฅผ ๋‘ ๋ฐฐ๋กœ(์ƒํ•œ๊นŒ์ง€), ๊ทธ ๋ชซ์˜
574
+ * ์ ˆ๋ฐ˜ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜ค๋ฉด ์ ˆ๋ฐ˜์œผ๋กœ(์›๋ž˜ ์ฃผ๊ธฐ๊นŒ์ง€) ๋˜๋Œ๋ฆฐ๋‹ค. ๋ฌธํ„ฑ์„ ๋‘ ๊ฐœ ๋‘๋Š” ์ด์œ ๋Š” ํ•˜๋‚˜๋ฉด ๊ฒฝ๊ณ„์—์„œ
575
+ * ๋Š˜๋ฆฌ๊ณ  ์ค„์ด๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
576
+ */
577
+ private static adjustBroadcastPeriod;
578
+ /**
579
+ * dirty ์ธ์Šคํ„ด์Šค ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… flush(์ฃผ๊ธฐ tick ๋˜๋Š” ๋ช…์‹œ ํ˜ธ์ถœ) โ€” **์‹œ๋ฎฌ๊ณผ ๋ผ์ด๋ธŒ ๋‘˜ ๋‹ค.**
580
+ *
581
+ * ์˜ˆ์ „์—๋Š” ๋ผ์ด๋ธŒ๋งŒ ๋ดค๋‹ค(`mode !== 'live'` ๋ฉด ๊ฑด๋„ˆ๋œ€). ์‹œ๋ฎฌ์€ delta ๋งˆ๋‹ค ๊ณง๋ฐ”๋กœ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…ํ–ˆ๊ณ , ๊ทธ๊ฒƒ์ด
582
+ * ํ•œ tick ์—์„œ ์ˆ˜๋ฐฑ ๋ฒˆ ๋ฐ˜๋ณต๋˜๋ฉฐ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋ง‰์•˜๋‹ค(์œ„ `start()` ์ฃผ์„์˜ 35์ดˆ ํ‹ฑ). ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์„ ๋ชจ์œผ๋Š”
391
583
  * ๊ทœ์œจ์€ ๋ชจ๋“œ์˜ ์„ฑ์งˆ์ด ์•„๋‹ˆ๋ผ **์ฑ„๋„์˜ ์„ฑ์งˆ**์ด๋‹ค โ€” ์ตœ์‹ -์ƒํƒœ ์ฑ„๋„์ด๋ฉด ์ค‘๊ฐ„ ์ƒํƒœ๋Š” ๋ณด๋‚ผ ๊ฐ’์ด ์—†๋‹ค.
392
584
  */
393
585
  static flushLiveBroadcasts(): void;
@@ -405,12 +597,49 @@ export declare class TwinEngine {
405
597
  * ์—†์œผ๋ฉด `undefined` ๋‹ค โ€” 0 ์ด ์•„๋‹ˆ๋‹ค. ๊ตฌ์กฐ ๋ฆฌ๋น„์ „์ด ์ƒ๊ธฐ๊ธฐ ์ „์— ๋งŒ๋“ค์–ด์ง„ ํŠธ์œˆ์€ ์•„์ง ๋ฆฌ๋น„์ „์ด
406
598
  * ์—†๊ณ , ๊ทธ ์‚ฌ์‹ค์„ 0 ์ด๋ผ๋Š” **์œ ํšจํ•ด ๋ณด์ด๋Š” ๋ฒˆํ˜ธ**๋กœ ์œ„์žฅํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.
407
599
  */
600
+ /** ๊ตฌ์กฐ ๋ฆฌ๋น„์ „ ์บ์‹œ โ€” `null` ์€ **์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค**๋Š” ๋œป์ด๋‹ค(๋ชจ๋ฆ„๊ณผ ๊ตฌ๋ณ„ํ•œ๋‹ค, ยง7.1). */
408
601
  private static structureRevCache;
409
602
  static structureRevOf(domainId: string, instanceId: string): Promise<number | undefined>;
603
+ /** ๊ณ„๊ธฐ ํ•œ ๋ฒŒ โ€” **๋‘ ๊ตฌ๋™์ด ๊ฐ™์€ ๊ฒƒ์„ ๋“ ๋‹ค**(ํ•œ์ชฝ๋งŒ ๋“ค๋ฉด ๊ทธ ๊ตฌ๋™์€ ๋ฌผ์–ด๋„ ๋‹ต์ด ์—†๋‹ค). */
604
+ private static newMetrics;
605
+ /**
606
+ * ๋ชจ์•„ ๋‘” ์ €๋„์„ **ํ•œ ๋ฒˆ์—** ์“ด๋‹ค โ€” ๋‘ ๊ตฌ๋™์ด ๊ฐ™์€ ๋ฌธ์„ ์“ด๋‹ค (ยง7.1).
607
+ *
608
+ * โ”€โ”€ ์™œ ํ•œ ํ•จ์ˆ˜์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
609
+ * ์“ฐ๋Š” ์ž๋ฆฌ๊ฐ€ ๋‘˜์ด๋ฉด(์ฃผ๊ธฐ flush ยท ์ •์ง€) ํ•œ์ชฝ๋งŒ ๊ณ ์ณ์ง€๊ณ , ๊ทธ ์–ด๊ธ‹๋‚จ์€ **์‚ฌ์‹ค์ด ์กฐ์šฉํžˆ ์‚ฌ๋ผ์ง€๋Š”**
610
+ * ๋ชจ์–‘์œผ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค. ๊ทธ๋ž˜์„œ ํ˜๋ฆฌ๋Š” ๊ทœ์น™์„ ์—ฌ๊ธฐ ํ•œ ๊ณณ์— ๋‘”๋‹ค.
611
+ *
612
+ * โ”€โ”€ ๋ฆฌ๋น„์ „์„ ๋ˆ„๊ฐ€ ๋งค๊ธฐ๋‚˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
613
+ * ยท ๋ผ์ด๋ธŒ โ€” ์›์ฒœ์€ ๋ฆฌ๋น„์ „์„ ์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ **ํ˜ธ์ŠคํŠธ๊ฐ€** ์ด์–ด ๋ถ™์ธ๋‹ค(์ €๋„ high-water ์—์„œ ์‹œ๋“œ).
614
+ * ยท ์‹œ๋ฎฌ โ€” **์ปค๋„์˜ ๋ฆฌ๋น„์ „**์ด ์‹ค๋ ค ์˜จ๋‹ค(์ €๋„์ด ๊ทธ๊ฒƒ์œผ๋กœ ์ ‘ํžˆ๊ณ  ์‹œ๊ฐ„์—ฌํ–‰์ด ๊ทธ๊ฒƒ์„ ๋”›๋Š”๋‹ค).
615
+ * ๊ทธ๋ž˜์„œ ๋ฒ„ํผ๋Š” ๋‘ ๋ชจ์–‘์„ ํ•จ๊ป˜ ๋“ ๋‹ค: ๋ด‰ํˆฌ๋งŒ ์žˆ์œผ๋ฉด ๋ผ์ด๋ธŒ, `{ event, revision }` ์ด๋ฉด ์‹œ๋ฎฌ์ด๋‹ค.
616
+ */
617
+ private static flushJournal;
618
+ /**
619
+ * ์ปค๋„์ด ๋งค๊ธด ๋ฆฌ๋น„์ „์„ ๊ทธ๋Œ€๋กœ ๋“ค๊ณ  ๋ฒŒํฌ ์ €์žฅ โ€” ์‹œ๋ฎฌ ๊ฒฝ๋กœ.
620
+ *
621
+ * ์˜ˆ์ „์—๋Š” ์ด ๊ฒฝ๋กœ๊ฐ€ **๋ธํƒ€๋งˆ๋‹ค ํ•œ ํ–‰์”ฉ** ์ €์žฅํ–ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ํ–‰๋งˆ๋‹ค ๊ตฌ์กฐ ๋ฆฌ๋น„์ „์„ ๋ฌผ์—ˆ๋‹ค). ๊ทœ๋ชจ์—์„œ ๊ทธ๊ฒƒ์ด
622
+ * ํ˜ธ์ŠคํŠธ๋ฅผ ๋จน์—ˆ๋‹ค(ยง7.1 ์‹ค์ธก). ์—ฌ๊ธฐ์„œ ๊ตฌ์กฐ ๋ฆฌ๋น„์ „์€ **ํ•œ ๋ฒˆ๋งŒ** ๋ฌป๋Š”๋‹ค.
623
+ */
624
+ static persistCarried(domainId: string, instanceId: string, items: {
625
+ event: any;
626
+ revision: number;
627
+ }[]): Promise<void>;
628
+ /**
629
+ * ์ €๋„ ํ–‰์„ ๋„ฃ๋Š”๋‹ค โ€” **๋„ฃ๊ธฐ๋งŒ ํ•œ๋‹ค**(2026-08-20).
630
+ *
631
+ * ์˜ˆ์ „์—๋Š” `save()` ์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ `save` ๋Š” ๋„ฃ์€ ๋’ค ์ƒ์„ฑ ์ปฌ๋Ÿผ์„ ์ฝ์œผ๋ ค๊ณ  **ํ–‰๋งˆ๋‹ค SELECT ๋ฅผ ํ•œ ๋ฒˆ ๋”**
632
+ * ํ•œ๋‹ค(์‹œํ—˜ ๋กœ๊ทธ์—์„œ ๊ทธ ์งˆ์˜๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ณด์˜€๋‹ค: `SELECT โ€ฆ FROM twin_events WHERE id = ?`). ์ €๋„์€
633
+ * append-only ์ด๊ณ  ๋ถ€๋ฅด๋Š” ์ชฝ์€ ๋Œ๋ ค๋ฐ›์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์“ฐ์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ทธ ์™•๋ณต์ด ์ˆœ์ˆ˜ ๋‚ญ๋น„๋‹ค.
634
+ *
635
+ * ๋ฌถ์Œ์€ **๋‚˜๋ˆ ์„œ** ๋„ฃ๋Š”๋‹ค: ํ•œ ๋ฌธ์— ์—ด์ด ์—ด๋‹ค์„ฏ์ธ ํ–‰์„ ์ˆ˜์ฒœ ๊ฐœ ์‹ค์œผ๋ฉด ๋“œ๋ผ์ด๋ฒ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ํ•œ๊ณ„์—
636
+ * ๊ฑธ๋ฆฐ๋‹ค(pg ๋Š” 65,535๊ฐœ). 500ํ–‰์ด๋ฉด ์–ด๋А ๋“œ๋ผ์ด๋ฒ„์—์„œ๋„ ์•ˆ์ „ํ•˜๋‹ค.
637
+ */
638
+ private static insertRows;
410
639
  /** live ์ €๋„ ๋ฐฐ์น˜ ๊ธฐ๋ก โ€” ๋ชจ์•„๋‘” CanonicalEnvelope ๋“ค์— startRevision+1.. ์„ ๋ถ€์—ฌํ•ด ๋ฒŒํฌ ์ €์žฅ(coalescer tick ๋‹น 1ํšŒ). */
411
640
  static persistBatch(domainId: string, instanceId: string, envelopes: any[], startRevision: number): Promise<void>;
412
641
  /** ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ upsert(๋„๋ฉ”์ธ+instanceId ์œ ๋‹ˆํฌ). status ์ธ์ž๋กœ provision(stopped)/start(running) ๊ณต์šฉ. */
413
- static register(domainId: string, instanceId: string, kind: string, model: TwinModelDef, status?: 'running' | 'stopped', realityMode?: RealityMode, origin?: any, meta?: {
642
+ static register(domainId: string, instanceId: string, kind: string, model: TwinModelDef, status?: 'running' | 'stopped', restartPolicy?: RestartPolicy, origin?: any, meta?: {
414
643
  name?: string;
415
644
  description?: string;
416
645
  actor?: {
@@ -455,7 +684,15 @@ export declare class TwinEngine {
455
684
  static adoptStructure(domainId: string, instanceId: string, model: TwinModelDef, comment?: string, origin?: any): Promise<{
456
685
  rev: number;
457
686
  } & StructureShift>;
458
- static provision(domainId: string, instanceId: string, kind: string, model: TwinModelDef, comment?: string, origin?: any,
687
+ static provision(domainId: string, instanceId: string, kind: string, model: TwinModelDef,
688
+ /**
689
+ * **์žฌ๊ธฐ๋™ ์ •์ฑ…์€ ์ƒ์„ฑ ์‹œ์ ์˜ ์„ ์–ธ์ด๋‹ค**(ADR-0029 ยง2) โ€” ํŠธ์œˆ์€ ์ •์ฑ… ์—†์ด ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค.
690
+ *
691
+ * ์˜ˆ์ „์—๋Š” ์ด ์ž๋ฆฌ๊ฐ€ ์—†์—ˆ๊ณ  `register` ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’(`sim-experiment` = ์ €๋„ ์ดˆ๊ธฐํ™”)์„ ๊ฐ์ธํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ
692
+ * ์„ ์–ธ์„ ๋น ๋œจ๋ฆฐ ํ”„๋กœ๋น„์ €๋‹์ด **์žฌ๊ธฐ๋™๋งˆ๋‹ค ์ด๋ ฅ์„ ์ง€์šฐ๋Š” ํŠธ์œˆ**์„ ์กฐ์šฉํžˆ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด์ œ ๋งŒ๋“œ๋Š” ์ชฝ์ด
693
+ * ๋งํ•ด์•ผ ํ•œ๋‹ค: ์ด ํŠธ์œˆ์ด ์ž๊ธฐ ๊ณผ๊ฑฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋Œ€ํ•˜๋Š”์ง€๋Š” ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์ด ์•„๋Š” ์‚ฌ์‹ค์ด๋‹ค.
694
+ */
695
+ restartPolicy: RestartPolicy, comment?: string, origin?: any,
459
696
  /** ์ด๋ฆ„ยท์ €์ž โ€” ์—…๋ฌดํ‚ค๋ฅผ ๋‚˜๋ˆ  ๋‘” ๋Œ€๊ฐ€๋กœ ์ด๋ฆ„์„ ํ•จ๊ป˜ ๋‚จ๊ธด๋‹ค(`register` ์˜ `meta` ๊ทธ๋Œ€๋กœ). */
460
697
  meta?: {
461
698
  name?: string;
@@ -497,18 +734,18 @@ export declare class TwinEngine {
497
734
  private static structureFingerprint;
498
735
  private static structureSignature;
499
736
  /** ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ model ๋กœ ๊ธฐ๋™(ํ”„๋กœ๋น„์ „๋œ ์ธ์Šคํ„ด์Šค start). model ์ธ์ž ์—†์ด ์ €์žฅ๋œ ๊ตฌ์กฐ๋กœ ์žฌ๊ธฐ๋™. */
500
- static startFromRegistry(domainId: string, instanceId: string, realityMode?: RealityMode): Promise<InstanceRuntime>;
737
+ static startFromRegistry(domainId: string, instanceId: string, restartPolicy?: RestartPolicy): Promise<InstanceRuntime>;
501
738
  /**
502
- * ์„ ์–ธ ๊ธฐ๋ฐ˜ ๋ถ€ํŒ…(ยง0 ํ”„๋ ˆ์ž„ โ‘  โ†’ ๋ถ€ํŒ… ๊ฑฐ๋™ ๋งคํ•‘) โ€” ํŠธ์œˆ์ด ์„ ์–ธํ•œ realityMode ์— ๋”ฐ๋ผ ์žฌ๊ธฐ๋™ ๋ฐฉ์‹์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.
739
+ * ์„ ์–ธ ๊ธฐ๋ฐ˜ ๋ถ€ํŒ…(ยง0 ํ”„๋ ˆ์ž„ โ‘  โ†’ ๋ถ€ํŒ… ๊ฑฐ๋™ ๋งคํ•‘) โ€” ํŠธ์œˆ์ด ์„ ์–ธํ•œ restartPolicy ์— ๋”ฐ๋ผ ์žฌ๊ธฐ๋™ ๋ฐฉ์‹์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.
503
740
  * ๋ถ€ํŒ… ๊ฒฝ๋กœ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„ "๋Ÿฐํƒ€์ž„ โ‰  ํ˜„์‹ค" ๋ฒ”์ฃผ์˜ค๋ฅ˜๋ฅผ ์ฝ”๋“œ๋กœ ๊ฐ•์ œํ•œ๋‹ค.
504
- * - 'mirror' : ํ˜„์‹ค=์™ธ๋ถ€ ์‹ค๋ฌผ โ†’ startLive(์žฌ๋™๊ธฐ). ์ด๋ฒคํŠธ๋Š” ์–ด๋Œ‘ํ„ฐ ingest ๋กœ ์œ ์ž…, ์ปค๋„ tick ์—†์Œ.
505
- * - 'sim-world' : ์ƒ์„ฑ ํƒ€์ž„๋ผ์ธ ์ง€์† โ†’ ์ €๋„ ๋ณด์กด + resume(ํ˜„์‹ค ์ด์–ด๊ฐ).
741
+ * - 'resync' : ํ˜„์‹ค=์™ธ๋ถ€ ์‹ค๋ฌผ โ†’ startLive(์žฌ๋™๊ธฐ). ์ด๋ฒคํŠธ๋Š” ์–ด๋Œ‘ํ„ฐ ingest ๋กœ ์œ ์ž…, ์ปค๋„ tick ์—†์Œ.
742
+ * - 'resume' : ์ƒ์„ฑ ํƒ€์ž„๋ผ์ธ ์ง€์† โ†’ ์ €๋„ ๋ณด์กด + resume(ํ˜„์‹ค ์ด์–ด๊ฐ).
506
743
  * โš  GATE(ยง8 โ‘กโ‘ข): ์ปค๋„ ์ƒํƒœ ์ง๋ ฌํ™”/์žฌ๊ฐœ๊ฐ€ ์•„์ง ์—†์–ด ์ง„์งœ resume ๋ถˆ๊ฐ€ โ†’ ์‹ค ํ•„์š”ยท์‹ค๋ถ€ํ•˜ ์‹œ ๊ตฌํ˜„.
507
744
  * ๊ทธ๋•Œ๊นŒ์ง€๋Š” ์ €๋„์„ ๋ณด์กดํ•˜๋˜ revision ์ถฉ๋Œ์„ ํ”ผํ•˜๋ ค fresh ๋กœ ๊ธฐ๋™ํ•˜๊ณ , ์„ ์–ธ๊ณผ ๊ตฌํ˜„์˜ ๊ฐ„๊ทน์„ ํฌ๊ฒŒ ๊ฒฝ๊ณ ํ•œ๋‹ค.
508
- * - 'sim-experiment' : seed ์žฌํ˜„ โ†’ resetJournal + fresh ๊ธฐ๋™(๋ฐฑ์ง€ ์‹œ์ž‘์ด ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ์„ ์–ธ๋œ ๊ฑฐ๋™).
745
+ * - 'reset' : seed ์žฌํ˜„ โ†’ resetJournal + fresh ๊ธฐ๋™(๋ฐฑ์ง€ ์‹œ์ž‘์ด ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ์„ ์–ธ๋œ ๊ฑฐ๋™).
509
746
  * ๋ฐ˜ํ™˜: ๊ธฐ๋™๋œ InstanceRuntime.
510
747
  */
511
- static bootDeclared(domainId: string, instanceId: string, mode?: RealityMode): Promise<InstanceRuntime>;
748
+ static bootDeclared(domainId: string, instanceId: string, mode: RestartPolicy): Promise<InstanceRuntime>;
512
749
  /**
513
750
  * ์ €๋„ ์ดˆ๊ธฐํ™” โ€” ์ธ์Šคํ„ด์Šค ์ด๋ฒคํŠธ ์ €๋„ purge(๋ ˆ์ง€์ŠคํŠธ๋ฆฌยท์ƒํƒœ๋Š” ์œ ์ง€).
514
751
  * ๋ฐ๋ชจ fresh-start ์šฉ: ๋งค ๋ถ€ํŒ… seed ๋ถ€ํ„ฐ ์ƒˆ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ๋ชจ์—์„œ, ๋ณต๊ตฌ๋ณธ ํ๊ธฐ ํ›„ revision 0 ๋ถ€ํ„ฐ ์žฌ์‹คํ–‰ํ•˜๋ฉด
@@ -571,7 +808,9 @@ export declare class TwinEngine {
571
808
  * ๊ธฐ์กด ๊ณต๊ฐ„์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ๋ณ‘ํ•ฉ์€ ์›๋ž˜ ๊ทธ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ์žˆ์—ˆ๋Š”๋ฐ(N:1) ๋งŒ๋“œ๋Š” ํ๋ฆ„์—์„œ
572
809
  * ๊ณต๊ฐ„์„ ๊ณ ๋ฅผ ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋‹ค โ€” ๋งˆ์Šคํ„ฐ๊ฐ€ ํŒŒ์ƒํ•œ id ๋งŒ ์“ฐ์˜€๋‹ค. ํŒ์ •์€ `resolveIngestSpace`(์ˆœ์ˆ˜).
573
810
  */
574
- static ingestMaster(domainId: string, master: ReferenceMaster, into?: {
811
+ static ingestMaster(domainId: string, master: ReferenceMaster,
812
+ /** ๋งŒ๋“ค์–ด์ง€๋Š” ํŠธ์œˆ์˜ ์žฌ๊ธฐ๋™ ์ •์ฑ… โ€” ์›๋ณธ์ด ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ **๋งŒ๋“œ๋Š” ์ชฝ์˜ ์„ ์–ธ**์ด๋‹ค(ADR-0029 ยง2). */
813
+ restartPolicy: RestartPolicy, into?: {
575
814
  spaceId?: string;
576
815
  },
577
816
  /** ๋ˆ„๊ฐ€ ์ธ์ œ์ŠคํŠธํ–ˆ๋‚˜ โ€” ์‚ฌ๋žŒ์ด ์—†๋Š” ๊ฒฝ๋กœ(๋ถ€ํŒ…)๋Š” ์ฃผ์ง€ ์•Š๋Š”๋‹ค(๊ฐ์‚ฌ ๊ธฐ๋ก์„ ์ง€์–ด๋‚ด์ง€ ์•Š๋Š”๋‹ค). */
@@ -589,14 +828,14 @@ export declare class TwinEngine {
589
828
  * ๋ณด๋“œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ tag ๋กœ ๊ตฌ๋…(board-ui provider)ํ•ด `component.data` ๋กœ ๋ผ์ด๋ธŒ ๊ฐฑ์‹ . delta ์‹œ์—๋งŒ(ํฌ์†Œ).
590
829
  * tag=์—”ํ‹ฐํ‹ฐ id(๋ฐ๋ชจ=๋‹จ์ผ ์ธ์Šคํ„ด์Šค). ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค/๋ณด๋“œ ์žฌ์‚ฌ์šฉ ์‹œ tag ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ํ›„์†.
591
830
  */
592
- /** ๋ฐฉ์†ก ์‹คํŒจ ๋กœ๊ทธ ์กฐ์ ˆ โ€” ์ฐฝ๋งˆ๋‹ค ํ•œ ์ค„(๋ง‰ํžŒ ๊ตฌ๋…์ž๋Š” ์ดˆ๋‹น ์ˆ˜์‹ญ ๋ฒˆ ์‹คํŒจํ•œ๋‹ค). */
831
+ /** ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ์‹คํŒจ ๋กœ๊ทธ ์กฐ์ ˆ โ€” ์ฐฝ๋งˆ๋‹ค ํ•œ ์ค„(๋ง‰ํžŒ ๊ตฌ๋…์ž๋Š” ์ดˆ๋‹น ์ˆ˜์‹ญ ๋ฒˆ ์‹คํŒจํ•œ๋‹ค). */
593
832
  private static publishDrops;
594
833
  private static readonly PUBLISH_DROP_LOG_MS;
595
834
  /**
596
- * ํ•œ ๋ฒˆ์˜ ๋ฐฉ์†ก โ€” **๊ตฌ๋…์ž ํ•˜๋‚˜๊ฐ€ ํ˜ธ์ŠคํŠธ๋ฅผ ์ฃฝ์ด์ง€ ๋ชปํ•˜๊ฒŒ.**
835
+ * ํ•œ ๋ฒˆ์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… โ€” **๊ตฌ๋…์ž ํ•˜๋‚˜๊ฐ€ ํ˜ธ์ŠคํŠธ๋ฅผ ์ฃฝ์ด์ง€ ๋ชปํ•˜๊ฒŒ.**
597
836
  *
598
837
  * โ”€โ”€ ๋ฌด์—‡์ด ์ฃฝ์˜€๋‚˜ (2026-08-14) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
599
- * ๋ฐ€๋ฆฐ push ๊ฐ€ 1024๋ฅผ ๋„˜์œผ๋ฉด pubsub ์ด ๋˜์ง„๋‹ค(`RepeaterOverflowError`). ๊ทธ ๋ฐฉ์†ก์€ ํƒ€์ด๋จธ ์ฝœ๋ฐฑ
838
+ * ๋ฐ€๋ฆฐ push ๊ฐ€ 1024๋ฅผ ๋„˜์œผ๋ฉด pubsub ์ด ์˜ค๋ฅ˜๋ฅผ ๋‚ธ๋‹ค(`RepeaterOverflowError`). ๊ทธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์€ ํƒ€์ด๋จธ ์ฝœ๋ฐฑ
600
839
  * ์•ˆ์—์„œ ์ผ์–ด๋‚˜๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ์žกํžˆ๋Š” ๊ณณ ์—†์ด ์˜ฌ๋ผ๊ฐ€ **ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚ฌ๋‹ค** โ€” ํŠธ์œˆ 14๊ฐœ๊ฐ€ ๋„๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€
601
840
  * ์†Œ๋น„๋ฅผ ๋ฉˆ์ถ˜ ๊ตฌ๋…์ž ํ•˜๋‚˜ ๋•Œ๋ฌธ์— ํ†ต์งธ๋กœ.
602
841
  *
@@ -605,7 +844,6 @@ export declare class TwinEngine {
605
844
  */
606
845
  private static publishGuarded;
607
846
  static publishEntityData(inst: InstanceRuntime): void;
608
- static persist(domainId: string, instanceId: string, msg: any): Promise<void>;
609
847
  /**
610
848
  * ์žฌ๋ถ€ํŒ… ๋ณต๊ตฌ / ์‹œ๊ฐ„์—ฌํ–‰ โ€” DB ์ €๋„์„ replay ํ•ด ์ƒํƒœ ์žฌ๊ตฌ์„ฑ.
611
849
  * model ๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(TwinInstance)์—์„œ, ์ด๋ฒคํŠธ๋Š” TwinEvent(revision ASC)์—์„œ.
@@ -618,6 +856,29 @@ export declare class TwinEngine {
618
856
  /**
619
857
  * ๊ณต๊ฐ„(๊ณต๋™๋ฐฐ์น˜) ์‹œ๊ฐ ๋ฒ”์œ„ โ€” ์Šคํฌ๋Ÿฌ๋ฒ„ ์•ต์ปค(runtime-state-model ยง4ยทยง6). ๊ทธ ๊ณต๊ฐ„ ์ „ ์ธ์Šคํ„ด์Šค ์ €๋„์˜ min/max eventTime.
620
858
  * ๋ฐ˜ํ™˜ {minTime, maxTime}(ISO) โ€” ์ด๋ฒคํŠธ/์‹œ๊ฐ ์—†์œผ๋ฉด null. ํด๋ผ ํžˆ์Šคํ† ๋ฆฌ ์Šคํฌ๋Ÿฌ๋ฒ„๊ฐ€ ์ด ๋ฒ”์œ„๋ฅผ ์‹œ๊ฐ์ถ•์œผ๋กœ ๊ทธ๋ฆฐ๋‹ค.
859
+ *
860
+ * โ”€โ”€ ๋‘ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ์ €๋„์„ ๋‹ค ์ฝ์ง€ ์•Š๋Š”๋‹ค (2026-08-20 ์‹ค์ธก์œผ๋กœ ์žก์Œ) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
861
+ * ์—ฌ๊ธฐ์„œ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค `find()` ๋กœ **ํ–‰์„ ์ „๋ถ€ ์—”ํ‹ฐํ‹ฐ๋กœ ํ•˜์ด๋“œ๋ ˆ์ด์…˜**ํ•œ ๋‹ค์Œ JS ์—์„œ min/max ๋ฅผ
862
+ * ๊ณจ๋ž๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ํ•จ์ˆ˜๋Š” ํ™”๋ฉด ์ƒ๋‹จ์˜ ์ปจํ…์ŠคํŠธ ๋ ๊ฐ€ **4์ดˆ๋งˆ๋‹ค** ๋ถ€๋ฅธ๋‹ค. ์‹ค์ธกํ•œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ
863
+ * `order-check` ํ•œ ํŠธ์œˆ์ด 275,882ํ–‰ ยท `payload` 131MB ์˜€๋‹ค โ€” 4์ดˆ๋งˆ๋‹ค ๊ทธ JSON ์„ ์ „๋ถ€ ํŒŒ์‹ฑํ•œ ๊ฒƒ์ด๋‹ค.
864
+ *
865
+ * ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์ด๋žฌ๋‹ค: ํ”„๋กœ์„ธ์Šค CPU 81~152%, ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š๋Š” ์งˆ์˜๊ฐ€ 8~14์ดˆ. JS ํ”„๋กœํŒŒ์ผ์˜ ์ƒ์œ„๊ฐ€
866
+ * TypeORM ์˜ `RelationIdLoader`ยท`RawSqlResultsToEntityTransformer`ยท`stringToSimpleJson`(= `payload`
867
+ * ํŒŒ์‹ฑ)์ด๊ณ  GC ๊ฐ€ 16.7% ์˜€๋‹ค. **ํŠธ์œˆ ํ‹ฑ๋„ ์ €๋„ ์“ฐ๊ธฐ๋„ ์•„๋‹ˆ๋ผ ์ด ์ฝ๊ธฐ์˜€๋‹ค.**
868
+ *
869
+ * ์ง‘๊ณ„๋Š” DB ๊ฐ€ ํ•œ๋‹ค. `(domain, instanceId, eventTime)` ์ธ๋ฑ์Šค๊ฐ€ ์ด๋ฏธ ์žˆ์–ด(`ix_twin_event_1`)
870
+ * ์ธ๋ฑ์Šค์˜ **์–‘ ๋์„ ์ง‘๋Š”๋‹ค** โ€” ํ–‰์„ ํ•˜๋‚˜๋„ ์‹ค์–ด ์˜ค์ง€ ์•Š๋Š”๋‹ค.
871
+ *
872
+ * โ”€โ”€ ์™œ MIN ๊ณผ MAX ๋ฅผ ํ•œ ๋ฌธ์žฅ์— ๋„ฃ์ง€ ์•Š๋‚˜ (์‹ค์ธก) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
873
+ * ์ฒ˜์Œ์— `SELECT MIN(...), MAX(...) ... WHERE instanceId IN (...)` ํ•œ ๋ฐฉ์œผ๋กœ ๋‘์—ˆ๋”๋‹ˆ **21ms** ์˜€๋‹ค.
874
+ * ์ง‘๊ณ„๊ฐ€ **๋‘˜์ด๋ฉด** ์˜ตํ‹ฐ๋งˆ์ด์ €์˜ ใ€Œ์ธ๋ฑ์Šค ๋์„ ์ง‘๋Š”ใ€ ์ตœ์ ํ™”๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š์•„ ์ธ๋ฑ์Šค ๊ตฌ๊ฐ„์„ ํ›‘๋Š”๋‹ค โ€”
875
+ * ์ฆ‰ ๋น„์šฉ์ด ์—ฌ์ „ํžˆ **ํ–‰ ์ˆ˜์— ๋น„๋ก€**ํ•œ๋‹ค. ํŠธ์œˆ๋งˆ๋‹ค ๋‹จ์ผ ์ง‘๊ณ„๋กœ ๋‚˜๋ˆ  ๋ฌผ์œผ๋ฉด **0.32ms**(ํŠธ์œˆ 3๊ฐœ ยท 6์™•๋ณต)
876
+ * ์ด๊ณ , ๋น„์šฉ์ด **ํŠธ์œˆ ์ˆ˜์— ๋น„๋ก€**ํ•œ๋‹ค. ๊ทœ๋ชจ ๊ธฐ์ค€(์—”ํ‹ฐํ‹ฐ 10๋งŒ)์—์„œ๋Š” ์ด ์ฐจ์ด๊ฐ€ ๋ณธ์งˆ์ด๋‹ค.
877
+ *
878
+ * ์™•๋ณต์€ ํŠธ์œˆ๋‹น ๋‘˜์ด์ง€๋งŒ **ํ•จ๊ป˜ ๋„์šด๋‹ค** โ€” ์›๊ฒฉ DB ์—์„œ ์ง๋ ฌ๋กœ ๋Œ๋ฉด ์™•๋ณต ์ง€์—ฐ์ด ๊ทธ๋Œ€๋กœ ์Œ“์ธ๋‹ค.
879
+ *
880
+ * ๋“œ๋ผ์ด๋ฒ„ ๋‹ค์„ฏ์„ ๋‹ค ์ง€๋‚˜๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ raw SQL ์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค(์ฟผ๋ฆฌ๋นŒ๋”์˜ MIN/MAX ๋Š” ์ด์‹๋œ๋‹ค).
881
+ * ๋Œ๋ ค์ฃผ๋Š” ๊ฐ’์˜ **๋ชจ์–‘์€ ๋“œ๋ผ์ด๋ฒ„๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค**(๋ฌธ์ž์—ดยทDate) โ€” ๋ฐ›์€ ๋’ค์— ํ•œ ๋ฒˆ ์ •๊ทœํ™”ํ•œ๋‹ค(`parseTime`).
621
882
  */
622
883
  static timeRange(domainId: string, spaceId: string): Promise<{
623
884
  minTime: string | null;
@@ -738,7 +999,116 @@ export declare class TwinEngine {
738
999
  static countForks(domainId: string, id: string, count: number): void;
739
1000
  /** ์—”์ง„ ๋ฐ–(์˜ˆ์ธก ์งˆ์˜ ๋“ฑ)์—์„œ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์žฐ๋‹ค โ€” ๊ฐ™์€ ๊ณ„๊ธฐํŒ์— ๋ชจ์ธ๋‹ค. */
740
1001
  static recordLoad(domainId: string, id: string, phase: LoadPhase, tookMs: number): void;
741
- /** ์ „์ฒด ๋ผ์ด๋ธŒ ์ธ์Šคํ„ด์Šค ๊ณ„์ธก(๋ชจ๋‹ˆํ„ฐ ๋Œ€์‹œ๋ณด๋“œ์šฉ). */
1002
+ private static ingestLedgers;
1003
+ /** ์ฐฝ์ด ๋‹ซํž ๋•Œ ๋ถ€๋ฅผ ๊ณณ โ€” ์˜์† ๊ณ„์ธต์ด ๋ถ€ํŒ…์—์„œ ํ•œ ๋ฒˆ ๋“ฑ๋กํ•œ๋‹ค(์ปค๋„ ์ธต์€ ๊ทธ ๊ณ„์ธต์„ ๋ชจ๋ฅธ๋‹ค). */
1004
+ private static onWindowClosed?;
1005
+ /**
1006
+ * ๋‹ซํžŒ ์ฐฝ์„ ๋ฐ›์„ ๊ณณ์„ ๋“ฑ๋กํ•œ๋‹ค โ€” **์˜์†(B)์ด ๋ถ™๋Š” ์œ ์ผํ•œ ๋ฌธ.**
1007
+ *
1008
+ * ์ด ํŒจํ‚ค์ง€๋Š” ์ €์žฅ ๊ณ„์ธต์„ ๋ชจ๋ฅธ๋‹ค. ๋“ฑ๋กํ•˜๋Š” ์ชฝ์ด ์ž๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์“ด๋‹ค. ํ›…์ด ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋„ ์žฅ๋ถ€๋Š” ๊ณ„์† ๊ตด๋Ÿฌ๊ฐ„๋‹ค
1009
+ * (`rollIngestWindow` ๊ฐ€ ๊ฐ์‹ผ๋‹ค) โ€” ์˜์†์„ ์ง€ํ‚ค๋ ค๊ณ  ๊ด€์ธก์„ ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค.
1010
+ */
1011
+ static onIngestWindowClosed(fn: (at: {
1012
+ domainId: string;
1013
+ instanceId: string;
1014
+ }, closed: IngestWindow) => void): void;
1015
+ /**
1016
+ * ํ•œ ๋ฒˆ์˜ ์ธ์ œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์žฅ๋ถ€์— ์ ๋Š”๋‹ค.
1017
+ *
1018
+ * `offered` ๋Š” **์ œ์‹œ๋œ ๋ ˆ์ฝ”๋“œ ์ˆ˜**๋‹ค(๊ฑฐ๋ถ€ ์—ฌ๋ถ€ ๋ฌด๊ด€). ํ†ต๊ณผ์œจ์„ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ณ„์ˆ˜๊ธฐ์—์„œ ๋‚˜๋ˆ  ๊ณ„์‚ฐํ•˜๋ฉด
1019
+ * ๋ถ„๋ชจ์™€ ๋ถ„์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์„ธ๊ฒŒ ๋˜๋ฏ€๋กœ, ํ•œ์ž๋ฆฌ์—์„œ ๋ณธ ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋„˜๊ธด๋‹ค.
1020
+ */
1021
+ static recordIngestResult(domainId: string, instanceId: string, offered: number, rejected: {
1022
+ record?: unknown;
1023
+ errors?: string[];
1024
+ }[] | undefined, nowMs?: number,
1025
+ /**
1026
+ * ๋งคํ•‘์€ ํ†ต๊ณผํ–ˆ๋Š”๋ฐ **์ปค๋„์ด ๋ฐ›์ง€ ์•Š์€** ์ˆ˜(`ingestLive` ์˜ ๋ฐ˜ํ™˜๊ณผ ๊ฒฌ์ฃผ์–ด ์–ป๋Š”๋‹ค).
1027
+ *
1028
+ * ใ€Œํ†ต๊ณผใ€๋กœ ์„ธ์ง€ ์•Š๋Š”๋‹ค โ€” ํŠธ์œˆ์ด ๋ฉˆ์ถ˜ ์‚ฌ์ด ์‚ฌ์‹ค์ด ์‚ฌ๋ผ์ง€๋Š”๋ฐ ํ™”๋ฉด์ด 100% ๋ผ๊ณ  ๋งํ•˜๊ฒŒ ๋œ๋‹ค.
1029
+ */
1030
+ undelivered?: number): void;
1031
+ /**
1032
+ * **์›๋ณธ์— ๋‹ฟ์ง€ ๋ชปํ–ˆ๋‹ค**๋ฅผ ์ ๋Š”๋‹ค โ€” ใ€Œ๋ฐ›์€ ๊ฒƒ์ด ์—†๋‹คใ€์™€ ๊ฐ€๋ฅธ๋‹ค(ยง`recordReadFailure`).
1033
+ *
1034
+ * ์ด ๋ฌธ์ด ์—†๋˜ ๋™์•ˆ ์‹ค ์›๋ณธ์ด ๋Š๊ฒจ๋„ ํŠธ์œˆ์˜ ์กฐํšŒ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์— ๊ทธ ์‚ฌ์‹ค์ด ์—†์—ˆ๋‹ค. ํ™”๋ฉด์ด ๋ณผ ์ˆ˜ ์žˆ๋Š”
1035
+ * ๊ฒƒ์€ ใ€Œ์ƒˆ ์‚ฌ์‹ค์ด ์—†๋‹คใ€๋ฟ์ด์—ˆ๊ณ  ๊ทธ๊ฒƒ์€ ใ€Œ์›๋ณธ์ด ์กฐ์šฉํ•˜๋‹คใ€์™€ ๊ตฌ๋ณ„๋˜์ง€ ์•Š๋Š”๋‹ค โ€” ์‹ค์ฆ ์ค‘์— ์›๋ณธ์ด
1036
+ * ๋Š๊ธฐ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์›์ธ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.
1037
+ *
1038
+ * ๋กœ๊ทธ๋กœ๋Š” ๋งํ•˜๊ณ  ์žˆ์—ˆ๋‹ค(์–ด๋Œ‘ํ„ฐ๊ฐ€ ์žฌ์‹œ๋„๋ฅผ ๊ฒฝ๊ณ ํ•œ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ **๋กœ๊ทธ๋Š” ์‚ฌ๋žŒ์ด ๋ณผ ๋•Œ๋งŒ ๊ฐ’์ด ์žˆ๋‹ค** โ€”
1039
+ * ํ™”๋ฉด์ด ๋งํ•˜๋ ค๋ฉด ์ƒํƒœ์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.
1040
+ */
1041
+ static recordIngestReadFailure(domainId: string, instanceId: string, reason: string, nowMs?: number, stream?: string): void;
1042
+ /**
1043
+ * ์ฝ๊ธฐ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค โ€” ๋‹จ์ ˆ ๊ธฐ๋ก์„ ์ง€์šด๋‹ค.
1044
+ *
1045
+ * **๋นˆ ์ฝ๊ธฐ๋„ ์„ฑ๊ณต์ด๋‹ค.** ์›๋ณธ์ด ใ€Œ์ƒˆ ๊ฒƒ์ด ์—†๋‹คใ€๊ณ  ๋‹ตํ•œ ๊ฒƒ์€ ๋‹ฟ์•˜๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ, ๊ทธ๋•Œ๋„ ๋ถ€๋ฅธ๋‹ค.
1046
+ * ๊ทธ ๋‘˜์„ ๊ฐ™๊ฒŒ ๋‘๋ฉด ์กฐ์šฉํ•œ ์›๋ณธ์ด ๋Š๊ธด ์›๋ณธ์œผ๋กœ ๋ณด์ธ๋‹ค.
1047
+ */
1048
+ static clearIngestReadFailure(domainId: string, instanceId: string): void;
1049
+ /**
1050
+ * ์ €๋„์— **์ ์€ ๊ฒƒ**์„ ๊ฐ™์€ ์žฅ๋ถ€์— ๋‚จ๊ธด๋‹ค โ€” ์œ ์ž…๊ณผ ๊ฐ™์€ 10๋ถ„ ์ฐฝ์—.
1051
+ *
1052
+ * โ”€โ”€ ์™œ ์œ ์ž… ์žฅ๋ถ€์— ๋„ฃ๋‚˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
1053
+ * ์ƒˆ ์žฅ๋ถ€๋ฅผ ๋งŒ๋“ค๋ฉด ใ€Œ๋‹ซํžŒ ์ฐฝ๋งŒ ์ตœ๊ทผใ€ยทใ€Œ0 ๊ณผ ์—†์Œ์„ ๊ฐ€๋ฅธ๋‹คใ€ยท์˜์†์„ ๋‘ ๋ฒŒ ์ง€์ผœ์•ผ ํ•˜๊ณ , ๊ทธ์ค‘ ํ•œ ๋ฒŒ๋งŒ
1054
+ * ๊ณ ์ณ์ง€๋Š” ๊ฒƒ์ด ๋ณดํ†ต์ด๋‹ค. ์œ ์ž… ์ฐฝ์€ ๊ทธ ๊ทœ์œจ์ด ์ด๋ฏธ ๋“ค์–ด ์žˆ๊ณ  ๋‹ซํž ๋•Œ ํ–‰์œผ๋กœ ๋‚จ๋Š”๋‹ค.
1055
+ *
1056
+ * โ”€โ”€ ์ด ๊ฐ’์ด ์—†์œผ๋ฉด ๋ฌด์—‡์„ ๋ชป ๋ณด๋‚˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
1057
+ * ๊ณ„๊ธฐ(`journalRate`)๋Š” **์ง€๊ธˆ**๋งŒ ๋‹ตํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ๋„์šฐ๋ฉด 0 ์—์„œ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ใ€Œ์–ด์ œ ์ด ์‹œ๊ฐ์—๋„
1058
+ * ์ด๋žฌ๋‚˜ใ€ยทใ€Œ๊ณ ์นœ ๋’ค๋กœ ์ค„์—ˆ๋‚˜ใ€๋ฅผ ๋ฌผ์„ ์ž๋ฆฌ๊ฐ€ ์—†๋‹ค. 2026-08-20 ์— ๊ณ ์นœ ๊ฒƒ์ด ๋ฐ”๋กœ ์“ฐ๊ธฐ ๊ฒฝ๋กœ์ด๋ฏ€๋กœ,
1059
+ * ๋˜๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
1060
+ */
1061
+ static recordJournalWrite(domainId: string, instanceId: string, rows: number, nowMs?: number): void;
1062
+ /**
1063
+ * ใ€Œ์ด ํŠธ์œˆ์ด ํ˜„์žฅ๊ณผ ๋งž์ถฐ์ง€๊ณ  ์žˆ๋‚˜ใ€ โ€” ํ•œ๋ˆˆ ํŒ์ • + ์ถ”์ด + ์‚ฌ์œ  + ํ‘œ๋ณธ.
1064
+ *
1065
+ * ์กฐํšŒํ•  ๋•Œ ์ฐฝ์„ ํ•œ ๋ฒˆ ๊ตด๋ฆฐ๋‹ค: ์œ ์ž…์ด ๋ฉˆ์ถ”๋ฉด ๋‹ค์Œ ์ธ์ œ์ŠคํŠธ๊ฐ€ ์—†์–ด ์ฐฝ์ด ์˜์›ํžˆ ๋‹ซํžˆ์ง€ ์•Š๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด
1066
+ * ใ€Œ์ตœ๊ทผใ€์ด ์˜›๊ฒƒ์œผ๋กœ ๋‚จ๋Š”๋‹ค. ํƒ€์ด๋จธ๋ฅผ ๋‘์ง€ ์•Š๋Š” ์ด์œ ๋Š” ํŠธ์œˆ๋งˆ๋‹ค ํƒ€์ด๋จธ๋ฅผ ๊ฑธ๋ฉด ๊ทธ ํƒ€์ด๋จธ๋“ค์ด ๋‹ค์‹œ
1067
+ * ๋ฉ”์ธ ๋ฃจํ”„์— ์–นํžˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค(์˜ค๋Š˜ ํ™•์ธํ•œ ๊ทธ ๋ถ€ํ•˜๋ฅผ ์ด ๊ธฐ๋Šฅ์ด ๋‹ค์‹œ ๋งŒ๋“ค ์ด์œ ๊ฐ€ ์—†๋‹ค).
1068
+ */
1069
+ /**
1070
+ * ๋„๋ฉ”์ธ์˜ ํŠธ์œˆ๋งˆ๋‹ค **ํ•œ ์ค„ ์š”์•ฝ** โ€” ๋ชฉ๋ก ํ™”๋ฉด๊ณผ ๋ฏธ๋‹ˆ ์ถ”์ด์šฉ.
1071
+ *
1072
+ * โ”€โ”€ ์™œ ์ƒ์„ธ์™€ ๋”ฐ๋กœ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
1073
+ * `ingestHealthOf` ๋Š” ์‚ฌ์œ  ๋ฌธ๊ตฌ์™€ **๋ ˆ์ฝ”๋“œ ์›๋ฌธ ํ‘œ๋ณธ**๊นŒ์ง€ ๋‚ธ๋‹ค. ๋ชฉ๋ก์— ํŠธ์œˆ์ด ์Šค๋ฌด ๊ฐœ๋ฉด ๊ทธ ์›๋ฌธ์ด
1074
+ * ์Šค๋ฌด ๋ฒŒ ์‹ค๋ ค ์กฐํšŒ๊ฐ€ ๋ฌด๊ฑฐ์›Œ์ง€๊ณ , ํ™”๋ฉด์€ ์–ด์ฐจํ”ผ ๊ทธ๊ฒƒ์„ ๊ทธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋Š” **์ˆซ์ž๋งŒ** ๋‚ธ๋‹ค.
1075
+ *
1076
+ * ์ถ”์ด๋Š” ์ฐฝ๋‹น ์ˆซ์ž ๋„ท์ด๋ผ ์ŠคํŒŒํฌ๋ผ์ธ ํ•˜๋‚˜์— ์ถฉ๋ถ„ํ•˜๊ณ  ๊ฐ€๋ณ๋‹ค.
1077
+ *
1078
+ * โ”€โ”€ ๋“ฑ๋ก๋œ ํŠธ์œˆ์„ ๊ธฐ์ค€์œผ๋กœ ํ›‘๋Š”๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
1079
+ * ๋„๋Š” ํŠธ์œˆ๋งŒ ํ›‘์œผ๋ฉด ใ€Œ๊ณ ์น˜๋ ค๊ณ  ๋ฉˆ์ถฐ ๋‘” ํŠธ์œˆใ€์ด ๋ชฉ๋ก์—์„œ ์‚ฌ๋ผ์ง„๋‹ค โ€” ์‚ฌ๋žŒ์ด ๋ฐฉ๊ธˆ ๋ฉˆ์ถ˜ ๊ทธ๊ฒƒ์„ ๋ณด๋ ค๊ณ 
1080
+ * ๋ชฉ๋ก์„ ์—ฌ๋Š”๋ฐ ์—†์œผ๋ฉด ๊ฒฐํ•จ์œผ๋กœ ์ฝ๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ํ˜ธ์ถœ๋ถ€(๋ชฉ๋ก ํ™”๋ฉด)๊ฐ€ ์•„๋Š” instanceId ๋“ค์„ ๋ฐ›๋Š”๋‹ค.
1081
+ */
1082
+ static ingestHealthBrief(domainId: string, instanceIds: string[]): {
1083
+ instanceId: string;
1084
+ verdict: string;
1085
+ acceptedRatio: number | null;
1086
+ trend: {
1087
+ offered: number;
1088
+ rejected: number;
1089
+ undelivered: number;
1090
+ rows: number;
1091
+ }[];
1092
+ lastAt: string | null;
1093
+ }[];
1094
+ /**
1095
+ * ํ•œ ํŠธ์œˆ์˜ ๋™๊ธฐํ™” ๊ฑด๊ฐ•.
1096
+ *
1097
+ * โ”€โ”€ ์กฐํšŒ๊ฐ€ ์žฅ๋ถ€๋ฅผ ์ „์ง„์‹œํ‚จ๋‹ค(์˜๋„) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
1098
+ * ์ฐฝ์€ **๋‹ค์Œ ์œ ์ž…์ด ์žˆ์„ ๋•Œ** ๋‹ซํžŒ๋‹ค. ๊ทธ๋ž˜์„œ ํ”ผ๋“œ๊ฐ€ ์ฃฝ์œผ๋ฉด ๋งˆ์ง€๋ง‰ ์ฐฝ์ด ์—ด๋ฆฐ ์ฑ„๋กœ ๋‚จ์•„ ์˜์›ํžˆ ์˜์†๋˜์ง€
1099
+ * ์•Š๊ณ , ์ถ”์ด์—๋„ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค. ์กฐํšŒ ์‹œ์ ์— ํ•œ ๋ฒˆ ๊ตด๋ ค ์ฃผ๋ฉด ๊ทธ ๋งˆ์ง€๋ง‰ ์ฐฝ์ด ๋‹ซํžˆ๋ฉด์„œ ์˜์† ํ›…๋„ ๋ถˆ๋ฆฐ๋‹ค
1100
+ * โ€” ์ฆ‰ **์ฃฝ์€ ํ”ผ๋“œ์˜ ๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„์„ ์žƒ์ง€ ์•Š๊ธฐ ์œ„ํ•ด** ์ฝ๊ธฐ๊ฐ€ ๊ตด๋ฆฐ๋‹ค. ๋ถ€์ˆ˜ํšจ๊ณผ์ง€๋งŒ ํ•„์š”ํ•œ ๋ถ€์ˆ˜ํšจ๊ณผ๋‹ค.
1101
+ *
1102
+ * ์‹œ๊ฐ์€ **ํ•œ ๋ฒˆ๋งŒ ์ฝ์–ด** ๊ตด๋ฆฌ๊ธฐ์™€ ํŒ์ •์— ๊ฐ™์€ ๊ฐ’์„ ์“ด๋‹ค. ๋‘ ๋ฒˆ ์ฝ์œผ๋ฉด ๊ทธ ์‚ฌ์ด์— ์ฐฝ์ด ๋‹ซํ˜€ ํŒ์ •์ด
1103
+ * ๊ตด๋ฆฌ๊ธฐ ์ „ ์ƒํƒœ๋ฅผ ๋ณด๋Š” ์ผ์ด ์ƒ๊ธด๋‹ค.
1104
+ */
1105
+ static ingestHealthOf(domainId: string, instanceId: string): IngestHealthView;
1106
+ /**
1107
+ * ๋„๋Š” ์ธ์Šคํ„ด์Šค ์ „์ฒด์˜ ๊ณ„์ธก(๋ชจ๋‹ˆํ„ฐ ๋Œ€์‹œ๋ณด๋“œ์šฉ) โ€” **์‹œ๋ฎฌ๊ณผ ๋ฏธ๋Ÿฌ๋ฅผ ํ•จ๊ป˜**.
1108
+ *
1109
+ * ์˜ˆ์ „์—๋Š” ์‹œ๋ฎฌ์— ๊ณ„๊ธฐ๊ฐ€ ์—†์–ด ์ด ๋ชฉ๋ก์—์„œ ์กฐ์šฉํžˆ ๋น ์กŒ๋‹ค(๊ณ„๊ธฐ๊ฐ€ `null` ์ด๋ผ ๊ฑธ๋Ÿฌ์กŒ๋‹ค). ๋„๋Š” ํŠธ์œˆ
1110
+ * ๋Œ€๋ถ€๋ถ„์ด ์‹œ๋ฎฌ์ธ ์„œ๋ฒ„์—์„œ ๊ทธ ๋ชฉ๋ก์€ ใ€Œ๋ถ€ํ•˜๊ฐ€ ๊ฑฐ์˜ ์—†๋‹คใ€๋กœ ๋ณด์˜€๋‹ค.
1111
+ */
742
1112
  static allMetrics(domainId?: string): Promise<any[]>;
743
1113
  /**
744
1114
  * ์˜ˆ์ธก์šฉ ์ปค๋„์„ **์ž„์˜ ์‹œ๊ฐ T ๊ธฐ์ค€**์œผ๋กœ ์žฌ๊ตฌ์„ฑ โ€” ๊ณผ๊ฑฐ-vantage ์˜ˆ์ธก(๋ฐฑํ…Œ์ŠคํŠธ)ยท"๊ทธ๋•Œ ์„œ์„œ ๋ณธ ๋ฏธ๋ž˜".
@@ -749,4 +1119,3 @@ export declare class TwinEngine {
749
1119
  /** ํ˜„์žฌ ์ „์ฒด ์Šค๋ƒ…์ƒท โ€” ๋ผ์ด๋ธŒ ์šฐ์„ , ์—†์œผ๋ฉด ์ €๋„ ๋ณต๊ตฌ ์บ์‹œ. */
750
1120
  static snapshot(domainId: string, id: string): any;
751
1121
  }
752
- export {};