@plurnk/plurnk-service 1.16.4 → 1.17.0

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 (636) hide show
  1. package/.env.defaults +122 -246
  2. package/INSTALL.md +84 -138
  3. package/README.md +9 -5
  4. package/SPEC.md +1710 -1015
  5. package/dist/Paths.d.ts +2 -0
  6. package/dist/Paths.d.ts.map +1 -1
  7. package/dist/Paths.js +2 -0
  8. package/dist/Paths.js.map +1 -1
  9. package/dist/build-info.d.ts.map +1 -1
  10. package/dist/build-info.js +7 -1
  11. package/dist/build-info.js.map +1 -1
  12. package/dist/build-info.json +1 -1
  13. package/dist/content/body-preview.d.ts +8 -0
  14. package/dist/content/body-preview.d.ts.map +1 -0
  15. package/dist/content/body-preview.js +39 -0
  16. package/dist/content/body-preview.js.map +1 -0
  17. package/dist/content/byte-view.d.ts +1 -4
  18. package/dist/content/byte-view.d.ts.map +1 -1
  19. package/dist/content/byte-view.js.map +1 -1
  20. package/dist/content/edit-collision.d.ts.map +1 -1
  21. package/dist/content/edit-collision.js +3 -4
  22. package/dist/content/edit-collision.js.map +1 -1
  23. package/dist/content/line-anchors.d.ts +2 -2
  24. package/dist/content/line-anchors.d.ts.map +1 -1
  25. package/dist/content/line-anchors.js +4 -3
  26. package/dist/content/line-anchors.js.map +1 -1
  27. package/dist/content/line-selection.d.ts +9 -0
  28. package/dist/content/line-selection.d.ts.map +1 -0
  29. package/dist/content/line-selection.js +29 -0
  30. package/dist/content/line-selection.js.map +1 -0
  31. package/dist/content/matcher.d.ts +0 -1
  32. package/dist/content/matcher.d.ts.map +1 -1
  33. package/dist/content/matcher.js +2 -3
  34. package/dist/content/matcher.js.map +1 -1
  35. package/dist/content/pattern-edits.d.ts +39 -0
  36. package/dist/content/pattern-edits.d.ts.map +1 -0
  37. package/dist/content/pattern-edits.js +121 -0
  38. package/dist/content/pattern-edits.js.map +1 -0
  39. package/dist/content/read-projector.d.ts +18 -9
  40. package/dist/content/read-projector.d.ts.map +1 -1
  41. package/dist/content/read-projector.js +132 -35
  42. package/dist/content/read-projector.js.map +1 -1
  43. package/dist/content/read-resolve.d.ts +3 -1
  44. package/dist/content/read-resolve.d.ts.map +1 -1
  45. package/dist/content/read-resolve.js +39 -7
  46. package/dist/content/read-resolve.js.map +1 -1
  47. package/dist/core/AdmittedTurnExecutor.d.ts +3 -5
  48. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
  49. package/dist/core/AdmittedTurnExecutor.js +91 -83
  50. package/dist/core/AdmittedTurnExecutor.js.map +1 -1
  51. package/dist/core/BareBatchRunner.d.ts +6 -1
  52. package/dist/core/BareBatchRunner.d.ts.map +1 -1
  53. package/dist/core/BareBatchRunner.js +20 -5
  54. package/dist/core/BareBatchRunner.js.map +1 -1
  55. package/dist/core/BudgetReadout.d.ts +2 -3
  56. package/dist/core/BudgetReadout.d.ts.map +1 -1
  57. package/dist/core/BudgetReadout.js +23 -32
  58. package/dist/core/BudgetReadout.js.map +1 -1
  59. package/dist/core/CapabilityPolicies.d.ts +3 -8
  60. package/dist/core/CapabilityPolicies.d.ts.map +1 -1
  61. package/dist/core/CapabilityPolicies.js +2 -28
  62. package/dist/core/CapabilityPolicies.js.map +1 -1
  63. package/dist/core/CapabilityResolver.d.ts +10 -10
  64. package/dist/core/CapabilityResolver.d.ts.map +1 -1
  65. package/dist/core/CapabilityResolver.js +87 -65
  66. package/dist/core/CapabilityResolver.js.map +1 -1
  67. package/dist/core/ChannelWrite.d.ts +14 -11
  68. package/dist/core/ChannelWrite.d.ts.map +1 -1
  69. package/dist/core/ChannelWrite.js +11 -12
  70. package/dist/core/ChannelWrite.js.map +1 -1
  71. package/dist/core/ChannelWrite.sql +99 -9
  72. package/dist/core/ClientInteractions.d.ts.map +1 -1
  73. package/dist/core/ClientInteractions.js +7 -0
  74. package/dist/core/ClientInteractions.js.map +1 -1
  75. package/dist/core/CoreSchemeServices.d.ts +13 -10
  76. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  77. package/dist/core/CoreSchemeServices.js +13 -5
  78. package/dist/core/CoreSchemeServices.js.map +1 -1
  79. package/dist/core/DataStatementRunner.d.ts +2 -2
  80. package/dist/core/DataStatementRunner.d.ts.map +1 -1
  81. package/dist/core/DataStatementRunner.js +36 -39
  82. package/dist/core/DataStatementRunner.js.map +1 -1
  83. package/dist/core/Dispatcher.d.ts +19 -26
  84. package/dist/core/Dispatcher.d.ts.map +1 -1
  85. package/dist/core/Dispatcher.js +369 -219
  86. package/dist/core/Dispatcher.js.map +1 -1
  87. package/dist/core/Dispatcher.sql +66 -0
  88. package/dist/core/DurableStatement.d.ts.map +1 -1
  89. package/dist/core/DurableStatement.js +2 -1
  90. package/dist/core/DurableStatement.js.map +1 -1
  91. package/dist/core/EditMutations.d.ts +14 -18
  92. package/dist/core/EditMutations.d.ts.map +1 -1
  93. package/dist/core/EditMutations.js +211 -280
  94. package/dist/core/EditMutations.js.map +1 -1
  95. package/dist/core/EditMutations.sql +15 -0
  96. package/dist/core/EditSequence.d.ts +13 -0
  97. package/dist/core/EditSequence.d.ts.map +1 -0
  98. package/dist/core/EditSequence.js +73 -0
  99. package/dist/core/EditSequence.js.map +1 -0
  100. package/dist/core/Engine.d.ts +17 -23
  101. package/dist/core/Engine.d.ts.map +1 -1
  102. package/dist/core/Engine.js +73 -163
  103. package/dist/core/Engine.js.map +1 -1
  104. package/dist/core/Engine.sql +0 -724
  105. package/dist/core/EntryAddressBinding.d.ts +7 -17
  106. package/dist/core/EntryAddressBinding.d.ts.map +1 -1
  107. package/dist/core/EntryAddressBinding.js +12 -72
  108. package/dist/core/EntryAddressBinding.js.map +1 -1
  109. package/dist/core/ExecutionOutputs.d.ts +9 -0
  110. package/dist/core/ExecutionOutputs.d.ts.map +1 -0
  111. package/dist/core/ExecutionOutputs.js +36 -0
  112. package/dist/core/ExecutionOutputs.js.map +1 -0
  113. package/dist/core/ExecutionOutputs.sql +13 -0
  114. package/dist/core/ExecutorRegistry.d.ts +7 -5
  115. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  116. package/dist/core/ExecutorRegistry.js +36 -32
  117. package/dist/core/ExecutorRegistry.js.map +1 -1
  118. package/dist/core/HostPaths.d.ts +1 -0
  119. package/dist/core/HostPaths.d.ts.map +1 -1
  120. package/dist/core/HostPaths.js +4 -0
  121. package/dist/core/HostPaths.js.map +1 -1
  122. package/dist/core/InferenceCall.d.ts.map +1 -1
  123. package/dist/core/InferenceCall.js +1 -2
  124. package/dist/core/InferenceCall.js.map +1 -1
  125. package/dist/core/InferenceCall.sql +29 -0
  126. package/dist/core/KillHandler.d.ts +1 -0
  127. package/dist/core/KillHandler.d.ts.map +1 -1
  128. package/dist/core/KillHandler.js +24 -21
  129. package/dist/core/KillHandler.js.map +1 -1
  130. package/dist/core/LogBody.d.ts +8 -1
  131. package/dist/core/LogBody.d.ts.map +1 -1
  132. package/dist/core/LogBody.js +42 -11
  133. package/dist/core/LogBody.js.map +1 -1
  134. package/dist/core/LogEntryProjection.d.ts +1 -0
  135. package/dist/core/LogEntryProjection.d.ts.map +1 -1
  136. package/dist/core/LogEntryProjection.js +18 -10
  137. package/dist/core/LogEntryProjection.js.map +1 -1
  138. package/dist/core/LogVisibility.d.ts +1 -0
  139. package/dist/core/LogVisibility.d.ts.map +1 -1
  140. package/dist/core/LogVisibility.js +3 -0
  141. package/dist/core/LogVisibility.js.map +1 -1
  142. package/dist/core/LogWriter.d.ts +2 -3
  143. package/dist/core/LogWriter.d.ts.map +1 -1
  144. package/dist/core/LogWriter.js +25 -32
  145. package/dist/core/LogWriter.js.map +1 -1
  146. package/dist/core/LogWriter.sql +23 -0
  147. package/dist/core/LoopDriver.d.ts +11 -8
  148. package/dist/core/LoopDriver.d.ts.map +1 -1
  149. package/dist/core/LoopDriver.js +163 -189
  150. package/dist/core/LoopDriver.js.map +1 -1
  151. package/dist/core/LoopDriver.sql +11 -0
  152. package/dist/core/LoopLifecycle.d.ts +32 -2
  153. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  154. package/dist/core/LoopLifecycle.js +88 -4
  155. package/dist/core/LoopLifecycle.js.map +1 -1
  156. package/dist/core/LoopLifecycle.sql +145 -28
  157. package/dist/core/LoopPolicyReader.sql +6 -0
  158. package/dist/core/MembershipMaterialization.d.ts.map +1 -1
  159. package/dist/core/MembershipMaterialization.js +6 -28
  160. package/dist/core/MembershipMaterialization.js.map +1 -1
  161. package/dist/core/ModelCall.sql +70 -0
  162. package/dist/core/MutationEffects.d.ts +5 -3
  163. package/dist/core/MutationEffects.d.ts.map +1 -1
  164. package/dist/core/MutationEffects.js +10 -28
  165. package/dist/core/MutationEffects.js.map +1 -1
  166. package/dist/core/NativeContent.d.ts +6 -0
  167. package/dist/core/NativeContent.d.ts.map +1 -0
  168. package/dist/core/NativeContent.js +16 -0
  169. package/dist/core/NativeContent.js.map +1 -0
  170. package/dist/core/NativeContent.sql +6 -0
  171. package/dist/core/NoticeChannel.js +1 -1
  172. package/dist/core/NoticeChannel.js.map +1 -1
  173. package/dist/core/OperatorConfig.js +5 -5
  174. package/dist/core/OperatorConfig.js.map +1 -1
  175. package/dist/core/PacketBuilder.d.ts +8 -5
  176. package/dist/core/PacketBuilder.d.ts.map +1 -1
  177. package/dist/core/PacketBuilder.js +117 -81
  178. package/dist/core/PacketBuilder.js.map +1 -1
  179. package/dist/core/PacketBuilder.sql +146 -0
  180. package/dist/core/PatternSelection.d.ts +28 -0
  181. package/dist/core/PatternSelection.d.ts.map +1 -0
  182. package/dist/core/PatternSelection.js +42 -0
  183. package/dist/core/PatternSelection.js.map +1 -0
  184. package/dist/core/ProblemLog.d.ts.map +1 -1
  185. package/dist/core/ProblemLog.js +0 -1
  186. package/dist/core/ProblemLog.js.map +1 -1
  187. package/dist/core/PromptFrames.d.ts +12 -0
  188. package/dist/core/PromptFrames.d.ts.map +1 -0
  189. package/dist/core/PromptFrames.js +28 -0
  190. package/dist/core/PromptFrames.js.map +1 -0
  191. package/dist/core/ProposalLifecycle.d.ts +0 -1
  192. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  193. package/dist/core/ProposalLifecycle.js +20 -19
  194. package/dist/core/ProposalLifecycle.js.map +1 -1
  195. package/dist/core/ProposalLifecycle.sql +33 -0
  196. package/dist/core/ProviderInstantiate.d.ts +1 -1
  197. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  198. package/dist/core/ProviderInstantiate.js +7 -14
  199. package/dist/core/ProviderInstantiate.js.map +1 -1
  200. package/dist/core/ReasoningView.d.ts +9 -0
  201. package/dist/core/ReasoningView.d.ts.map +1 -0
  202. package/dist/core/ReasoningView.js +47 -0
  203. package/dist/core/ReasoningView.js.map +1 -0
  204. package/dist/core/ResourceBindings.d.ts +16 -0
  205. package/dist/core/ResourceBindings.d.ts.map +1 -0
  206. package/dist/core/ResourceBindings.js +45 -0
  207. package/dist/core/ResourceBindings.js.map +1 -0
  208. package/dist/core/ResourceMutations.d.ts +5 -8
  209. package/dist/core/ResourceMutations.d.ts.map +1 -1
  210. package/dist/core/ResourceMutations.js +6 -7
  211. package/dist/core/ResourceMutations.js.map +1 -1
  212. package/dist/core/ResourceSelector.d.ts +2 -2
  213. package/dist/core/ResourceSelector.d.ts.map +1 -1
  214. package/dist/core/ResourceSelector.js +122 -62
  215. package/dist/core/ResourceSelector.js.map +1 -1
  216. package/dist/core/ResourceTransfers.d.ts +4 -2
  217. package/dist/core/ResourceTransfers.d.ts.map +1 -1
  218. package/dist/core/ResourceTransfers.js +95 -26
  219. package/dist/core/ResourceTransfers.js.map +1 -1
  220. package/dist/core/RuntimeWorker.d.ts +5 -0
  221. package/dist/core/RuntimeWorker.d.ts.map +1 -0
  222. package/dist/core/RuntimeWorker.js +10 -0
  223. package/dist/core/RuntimeWorker.js.map +1 -0
  224. package/dist/core/RuntimeWorker.sql +5 -0
  225. package/dist/core/SchemeRegistry.d.ts +12 -16
  226. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  227. package/dist/core/SchemeRegistry.js +58 -84
  228. package/dist/core/SchemeRegistry.js.map +1 -1
  229. package/dist/core/StoredPacket.d.ts +6 -1
  230. package/dist/core/StoredPacket.d.ts.map +1 -1
  231. package/dist/core/StoredPacket.js +30 -10
  232. package/dist/core/StoredPacket.js.map +1 -1
  233. package/dist/core/StrikeRail.d.ts +9 -6
  234. package/dist/core/StrikeRail.d.ts.map +1 -1
  235. package/dist/core/StrikeRail.js +60 -113
  236. package/dist/core/StrikeRail.js.map +1 -1
  237. package/dist/core/StrikeRail.sql +12 -0
  238. package/dist/core/TerminalResult.d.ts +1 -1
  239. package/dist/core/TerminalResult.d.ts.map +1 -1
  240. package/dist/core/TerminalResult.js +2 -2
  241. package/dist/core/TerminalResult.js.map +1 -1
  242. package/dist/core/TokenCalibration.d.ts +1 -6
  243. package/dist/core/TokenCalibration.d.ts.map +1 -1
  244. package/dist/core/TokenCalibration.js +13 -9
  245. package/dist/core/TokenCalibration.js.map +1 -1
  246. package/dist/core/TokenCalibration.sql +15 -0
  247. package/dist/core/ToolInputSchema.d.ts +6 -0
  248. package/dist/core/ToolInputSchema.d.ts.map +1 -0
  249. package/dist/core/ToolInputSchema.js +43 -0
  250. package/dist/core/ToolInputSchema.js.map +1 -0
  251. package/dist/core/ToolResources.d.ts.map +1 -1
  252. package/dist/core/ToolResources.js +76 -52
  253. package/dist/core/ToolResources.js.map +1 -1
  254. package/dist/core/Turn.d.ts +5 -2
  255. package/dist/core/Turn.d.ts.map +1 -1
  256. package/dist/core/Turn.js +13 -11
  257. package/dist/core/Turn.js.map +1 -1
  258. package/dist/core/Turn.sql +25 -39
  259. package/dist/core/{SendBroadcastHandler.d.ts → TurnDispositionHandler.d.ts} +25 -17
  260. package/dist/core/TurnDispositionHandler.d.ts.map +1 -0
  261. package/dist/core/TurnDispositionHandler.js +198 -0
  262. package/dist/core/TurnDispositionHandler.js.map +1 -0
  263. package/dist/core/TurnMaterialization.d.ts +2 -3
  264. package/dist/core/TurnMaterialization.d.ts.map +1 -1
  265. package/dist/core/TurnMaterialization.js +40 -15
  266. package/dist/core/TurnMaterialization.js.map +1 -1
  267. package/dist/core/TurnMaterialization.sql +44 -0
  268. package/dist/core/TurnOps.d.ts.map +1 -1
  269. package/dist/core/TurnOps.js +8 -64
  270. package/dist/core/TurnOps.js.map +1 -1
  271. package/dist/core/TurnRunner.d.ts +9 -12
  272. package/dist/core/TurnRunner.d.ts.map +1 -1
  273. package/dist/core/TurnRunner.js +232 -408
  274. package/dist/core/TurnRunner.js.map +1 -1
  275. package/dist/core/TurnRunner.sql +74 -0
  276. package/dist/core/TurnSources.sql +39 -0
  277. package/dist/core/WorkerControlAddress.d.ts +1 -0
  278. package/dist/core/WorkerControlAddress.d.ts.map +1 -1
  279. package/dist/core/WorkerControlAddress.js +5 -0
  280. package/dist/core/WorkerControlAddress.js.map +1 -1
  281. package/dist/core/WorkerControlHandler.d.ts +1 -3
  282. package/dist/core/WorkerControlHandler.d.ts.map +1 -1
  283. package/dist/core/WorkerControlHandler.js +41 -48
  284. package/dist/core/WorkerControlHandler.js.map +1 -1
  285. package/dist/core/WorkerName.d.ts +8 -6
  286. package/dist/core/WorkerName.d.ts.map +1 -1
  287. package/dist/core/WorkerName.js +33 -24
  288. package/dist/core/WorkerName.js.map +1 -1
  289. package/dist/core/WorkerName.sql +7 -10
  290. package/dist/core/WorkspaceGate.d.ts +1 -1
  291. package/dist/core/WorkspaceGate.d.ts.map +1 -1
  292. package/dist/core/WorkspaceGate.js +29 -6
  293. package/dist/core/WorkspaceGate.js.map +1 -1
  294. package/dist/core/ambient.sql +236 -0
  295. package/dist/core/attachments.d.ts +2 -1
  296. package/dist/core/attachments.d.ts.map +1 -1
  297. package/dist/core/attachments.js +5 -4
  298. package/dist/core/attachments.js.map +1 -1
  299. package/dist/core/caps/CapsResolve.d.ts +2 -3
  300. package/dist/core/caps/CapsResolve.d.ts.map +1 -1
  301. package/dist/core/caps/CapsResolve.js +5 -5
  302. package/dist/core/caps/CapsResolve.js.map +1 -1
  303. package/dist/core/caps/DbChannelCaps.d.ts +1 -1
  304. package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
  305. package/dist/core/caps/DbChannelCaps.js +4 -6
  306. package/dist/core/caps/DbChannelCaps.js.map +1 -1
  307. package/dist/core/caps/DbEntryCaps.d.ts +2 -1
  308. package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
  309. package/dist/core/caps/DbEntryCaps.js +11 -17
  310. package/dist/core/caps/DbEntryCaps.js.map +1 -1
  311. package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
  312. package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
  313. package/dist/core/caps/DbNotifyCaps.js +3 -5
  314. package/dist/core/caps/DbNotifyCaps.js.map +1 -1
  315. package/dist/core/caps/DbProjectionCaps.js +1 -1
  316. package/dist/core/caps/DbProjectionCaps.js.map +1 -1
  317. package/dist/core/caps/DbSubscriptionCaps.d.ts +1 -1
  318. package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
  319. package/dist/core/caps/DbSubscriptionCaps.js +5 -7
  320. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
  321. package/dist/core/caps/SchemeCtxImpl.d.ts +0 -2
  322. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  323. package/dist/core/caps/SchemeCtxImpl.js +4 -20
  324. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  325. package/dist/core/env-defaults.d.ts.map +1 -1
  326. package/dist/core/env-defaults.js +4 -2
  327. package/dist/core/env-defaults.js.map +1 -1
  328. package/dist/core/file-materialization.d.ts +4 -1
  329. package/dist/core/file-materialization.d.ts.map +1 -1
  330. package/dist/core/file-materialization.js +14 -0
  331. package/dist/core/file-materialization.js.map +1 -1
  332. package/dist/core/fork.d.ts +1 -6
  333. package/dist/core/fork.d.ts.map +1 -1
  334. package/dist/core/fork.js +9 -153
  335. package/dist/core/fork.js.map +1 -1
  336. package/dist/core/fork.sql +162 -185
  337. package/dist/core/git-env.d.ts +1 -0
  338. package/dist/core/git-env.d.ts.map +1 -1
  339. package/dist/core/git-env.js +39 -2
  340. package/dist/core/git-env.js.map +1 -1
  341. package/dist/core/git-membership.d.ts.map +1 -1
  342. package/dist/core/git-membership.js +64 -48
  343. package/dist/core/git-membership.js.map +1 -1
  344. package/dist/core/git-state.d.ts.map +1 -1
  345. package/dist/core/git-state.js +25 -19
  346. package/dist/core/git-state.js.map +1 -1
  347. package/dist/core/glob_match.d.ts +4 -0
  348. package/dist/core/glob_match.d.ts.map +1 -0
  349. package/dist/core/glob_match.js +7 -0
  350. package/dist/core/glob_match.js.map +1 -0
  351. package/dist/core/maintenance.sql +6 -0
  352. package/dist/core/mutation-types.d.ts +7 -28
  353. package/dist/core/mutation-types.d.ts.map +1 -1
  354. package/dist/core/packet-inject.d.ts.map +1 -1
  355. package/dist/core/packet-inject.js +2 -3
  356. package/dist/core/packet-inject.js.map +1 -1
  357. package/dist/core/packet-wire.d.ts +8 -6
  358. package/dist/core/packet-wire.d.ts.map +1 -1
  359. package/dist/core/packet-wire.js +131 -163
  360. package/dist/core/packet-wire.js.map +1 -1
  361. package/dist/core/plurnk-uri.d.ts +1 -1
  362. package/dist/core/plurnk-uri.d.ts.map +1 -1
  363. package/dist/core/plurnk-uri.js +5 -12
  364. package/dist/core/plurnk-uri.js.map +1 -1
  365. package/dist/core/scheme-types.d.ts +3 -3
  366. package/dist/core/scheme-types.d.ts.map +1 -1
  367. package/dist/core/scheme-types.js.map +1 -1
  368. package/dist/core/sha256.d.ts +4 -0
  369. package/dist/core/sha256.d.ts.map +1 -0
  370. package/dist/core/sha256.js +6 -0
  371. package/dist/core/sha256.js.map +1 -0
  372. package/dist/core/teaching.js +1 -1
  373. package/dist/core/teaching.js.map +1 -1
  374. package/dist/core/turn-scheduler.d.ts.map +1 -1
  375. package/dist/core/turn-scheduler.js +5 -18
  376. package/dist/core/turn-scheduler.js.map +1 -1
  377. package/dist/core/turn-signals.d.ts +0 -6
  378. package/dist/core/turn-signals.d.ts.map +1 -1
  379. package/dist/core/turn-signals.js +1 -7
  380. package/dist/core/turn-signals.js.map +1 -1
  381. package/dist/core/worker-ops.sql +15 -22
  382. package/dist/core/workspace-settings.d.ts.map +1 -1
  383. package/dist/core/workspace-settings.js +18 -2
  384. package/dist/core/workspace-settings.js.map +1 -1
  385. package/dist/core/workspace-settings.sql +6 -0
  386. package/dist/digest/Digest.d.ts.map +1 -1
  387. package/dist/digest/Digest.js +27 -90
  388. package/dist/digest/Digest.js.map +1 -1
  389. package/dist/digest/DigestRender.d.ts.map +1 -1
  390. package/dist/digest/DigestRender.js +14 -54
  391. package/dist/digest/DigestRender.js.map +1 -1
  392. package/dist/digest/digest-rows.d.ts +10 -32
  393. package/dist/digest/digest-rows.d.ts.map +1 -1
  394. package/dist/digest/digest.sql +43 -18
  395. package/dist/schemes/Exec.d.ts +6 -12
  396. package/dist/schemes/Exec.d.ts.map +1 -1
  397. package/dist/schemes/Exec.js +256 -188
  398. package/dist/schemes/Exec.js.map +1 -1
  399. package/dist/schemes/ExecOutputScheme.d.ts +8 -6
  400. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  401. package/dist/schemes/ExecOutputScheme.js +33 -61
  402. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  403. package/dist/schemes/ExecutionInput.d.ts +12 -0
  404. package/dist/schemes/ExecutionInput.d.ts.map +1 -0
  405. package/dist/schemes/ExecutionInput.js +94 -0
  406. package/dist/schemes/ExecutionInput.js.map +1 -0
  407. package/dist/schemes/File.d.ts +5 -2
  408. package/dist/schemes/File.d.ts.map +1 -1
  409. package/dist/schemes/File.js +62 -92
  410. package/dist/schemes/File.js.map +1 -1
  411. package/dist/schemes/Log.d.ts.map +1 -1
  412. package/dist/schemes/Log.js +84 -79
  413. package/dist/schemes/Log.js.map +1 -1
  414. package/dist/schemes/Log.sql +183 -15
  415. package/dist/schemes/Prompt.d.ts.map +1 -1
  416. package/dist/schemes/Prompt.js +3 -12
  417. package/dist/schemes/Prompt.js.map +1 -1
  418. package/dist/schemes/QuestionTool.d.ts +5 -0
  419. package/dist/schemes/QuestionTool.d.ts.map +1 -1
  420. package/dist/schemes/QuestionTool.js +6 -14
  421. package/dist/schemes/QuestionTool.js.map +1 -1
  422. package/dist/schemes/Skill.d.ts +12 -7
  423. package/dist/schemes/Skill.d.ts.map +1 -1
  424. package/dist/schemes/Skill.js +149 -21
  425. package/dist/schemes/Skill.js.map +1 -1
  426. package/dist/schemes/TurnSource.d.ts +12 -0
  427. package/dist/schemes/TurnSource.d.ts.map +1 -0
  428. package/dist/schemes/TurnSource.js +116 -0
  429. package/dist/schemes/TurnSource.js.map +1 -0
  430. package/dist/schemes/Worker.d.ts +3 -3
  431. package/dist/schemes/Worker.d.ts.map +1 -1
  432. package/dist/schemes/Worker.js +61 -208
  433. package/dist/schemes/Worker.js.map +1 -1
  434. package/dist/schemes/_entry-crud.d.ts +12 -15
  435. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  436. package/dist/schemes/_entry-crud.js +63 -63
  437. package/dist/schemes/_entry-crud.js.map +1 -1
  438. package/dist/schemes/_entry-crud.sql +142 -46
  439. package/dist/schemes/_entry-find.d.ts +1 -3
  440. package/dist/schemes/_entry-find.d.ts.map +1 -1
  441. package/dist/schemes/_entry-find.js +111 -112
  442. package/dist/schemes/_entry-find.js.map +1 -1
  443. package/dist/schemes/_entry-find.sql +22 -14
  444. package/dist/schemes/_entry-fts.d.ts +14 -0
  445. package/dist/schemes/_entry-fts.d.ts.map +1 -0
  446. package/dist/schemes/_entry-fts.js +82 -0
  447. package/dist/schemes/_entry-fts.js.map +1 -0
  448. package/dist/schemes/_entry-fts.sql +31 -0
  449. package/dist/schemes/_entry-graph.d.ts.map +1 -1
  450. package/dist/schemes/_entry-graph.js +6 -14
  451. package/dist/schemes/_entry-graph.js.map +1 -1
  452. package/dist/schemes/_entry-graph.sql +29 -44
  453. package/dist/schemes/_entry-manifest.d.ts +2 -1
  454. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  455. package/dist/schemes/_entry-manifest.js +15 -12
  456. package/dist/schemes/_entry-manifest.js.map +1 -1
  457. package/dist/schemes/_entry-manifest.sql +26 -0
  458. package/dist/schemes/_entry-ops.d.ts +3 -5
  459. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  460. package/dist/schemes/_entry-ops.js +30 -43
  461. package/dist/schemes/_entry-ops.js.map +1 -1
  462. package/dist/schemes/_entry-ops.sql +5 -6
  463. package/dist/schemes/_entry-readable.d.ts +8 -0
  464. package/dist/schemes/_entry-readable.d.ts.map +1 -0
  465. package/dist/schemes/_entry-readable.js +38 -0
  466. package/dist/schemes/_entry-readable.js.map +1 -0
  467. package/dist/schemes/_entry-send.d.ts +1 -1
  468. package/dist/schemes/_entry-send.d.ts.map +1 -1
  469. package/dist/schemes/_entry-send.js +3 -3
  470. package/dist/schemes/_entry-send.js.map +1 -1
  471. package/dist/schemes/_search-index.d.ts +1 -3
  472. package/dist/schemes/_search-index.d.ts.map +1 -1
  473. package/dist/schemes/_search-index.js +79 -110
  474. package/dist/schemes/_search-index.js.map +1 -1
  475. package/dist/schemes/_search-index.sql +30 -0
  476. package/dist/schemes/exec-runtime.d.ts +1 -1
  477. package/dist/schemes/exec-runtime.d.ts.map +1 -1
  478. package/dist/schemes/exec-runtime.js.map +1 -1
  479. package/dist/server/ClientReads.d.ts +2 -2
  480. package/dist/server/ClientReads.d.ts.map +1 -1
  481. package/dist/server/ClientReads.js +5 -8
  482. package/dist/server/ClientReads.js.map +1 -1
  483. package/dist/server/Daemon.d.ts +14 -21
  484. package/dist/server/Daemon.d.ts.map +1 -1
  485. package/dist/server/Daemon.js +135 -156
  486. package/dist/server/Daemon.js.map +1 -1
  487. package/dist/server/DaemonModule.d.ts +23 -21
  488. package/dist/server/DaemonModule.d.ts.map +1 -1
  489. package/dist/server/DrainSupervisor.d.ts +8 -21
  490. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  491. package/dist/server/DrainSupervisor.js +278 -306
  492. package/dist/server/DrainSupervisor.js.map +1 -1
  493. package/dist/server/Functionality.d.ts +11 -12
  494. package/dist/server/Functionality.d.ts.map +1 -1
  495. package/dist/server/Functionality.js +129 -101
  496. package/dist/server/Functionality.js.map +1 -1
  497. package/dist/server/FunctionalityManager.d.ts +3 -5
  498. package/dist/server/FunctionalityManager.d.ts.map +1 -1
  499. package/dist/server/FunctionalityManager.js +20 -58
  500. package/dist/server/FunctionalityManager.js.map +1 -1
  501. package/dist/server/MembersFunctionality.d.ts +5 -4
  502. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  503. package/dist/server/MembersFunctionality.js +24 -37
  504. package/dist/server/MembersFunctionality.js.map +1 -1
  505. package/dist/server/PlurnkSkill.d.ts +11 -0
  506. package/dist/server/PlurnkSkill.d.ts.map +1 -0
  507. package/dist/server/PlurnkSkill.js +41 -0
  508. package/dist/server/PlurnkSkill.js.map +1 -0
  509. package/dist/server/Retention.d.ts +22 -0
  510. package/dist/server/Retention.d.ts.map +1 -0
  511. package/dist/server/Retention.js +54 -0
  512. package/dist/server/Retention.js.map +1 -0
  513. package/dist/server/Retention.sql +36 -0
  514. package/dist/server/ServiceModules.d.ts +5 -0
  515. package/dist/server/ServiceModules.d.ts.map +1 -0
  516. package/dist/server/ServiceModules.js +10 -0
  517. package/dist/server/ServiceModules.js.map +1 -0
  518. package/dist/server/SkillsFunctionality.d.ts +14 -19
  519. package/dist/server/SkillsFunctionality.d.ts.map +1 -1
  520. package/dist/server/SkillsFunctionality.js +97 -104
  521. package/dist/server/SkillsFunctionality.js.map +1 -1
  522. package/dist/server/WorkerModelResolver.d.ts +4 -0
  523. package/dist/server/WorkerModelResolver.d.ts.map +1 -1
  524. package/dist/server/WorkerModelResolver.js +72 -39
  525. package/dist/server/WorkerModelResolver.js.map +1 -1
  526. package/dist/server/WorkspaceCapabilities.d.ts +21 -0
  527. package/dist/server/WorkspaceCapabilities.d.ts.map +1 -0
  528. package/dist/server/{WorkerCapabilities.js → WorkspaceCapabilities.js} +40 -40
  529. package/dist/server/WorkspaceCapabilities.js.map +1 -0
  530. package/dist/server/WorkspaceResidency.d.ts +36 -0
  531. package/dist/server/WorkspaceResidency.d.ts.map +1 -0
  532. package/dist/server/WorkspaceResidency.js +199 -0
  533. package/dist/server/WorkspaceResidency.js.map +1 -0
  534. package/dist/server/client-input.d.ts +1 -4
  535. package/dist/server/client-input.d.ts.map +1 -1
  536. package/dist/server/client-input.js +4 -45
  537. package/dist/server/client-input.js.map +1 -1
  538. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
  539. package/dist/server/dispatch-as-plurnk.js +4 -22
  540. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  541. package/dist/server/drain.sql +65 -42
  542. package/dist/server/envelope.d.ts +8 -0
  543. package/dist/server/envelope.d.ts.map +1 -1
  544. package/dist/server/envelope.js +9 -7
  545. package/dist/server/envelope.js.map +1 -1
  546. package/dist/server/envelope.sql +49 -13
  547. package/dist/server/lifecycle-recovery.sql +14 -17
  548. package/dist/server/logEntry.d.ts +1 -1
  549. package/dist/server/logEntry.d.ts.map +1 -1
  550. package/dist/server/logEntry.js +4 -1
  551. package/dist/server/logEntry.js.map +1 -1
  552. package/dist/server/logEntry.sql +25 -1
  553. package/dist/server/loopDocs.d.ts +2 -2
  554. package/dist/server/loopDocs.d.ts.map +1 -1
  555. package/dist/server/loopDocs.js +38 -31
  556. package/dist/server/loopDocs.js.map +1 -1
  557. package/dist/server/loopDocs.sql +1 -3
  558. package/dist/server/model-catalog.d.ts.map +1 -1
  559. package/dist/server/model-catalog.js +2 -1
  560. package/dist/server/model-catalog.js.map +1 -1
  561. package/dist/server/model-route.d.ts +1 -1
  562. package/dist/server/model-route.d.ts.map +1 -1
  563. package/dist/server/model-route.js +4 -2
  564. package/dist/server/model-route.js.map +1 -1
  565. package/dist/server/seam-entry-read.sql +3 -4
  566. package/dist/server/seam-loop.sql +2 -9
  567. package/dist/server/workspace-capabilities.sql +19 -0
  568. package/dist/service.d.ts.map +1 -1
  569. package/dist/service.js +5 -17
  570. package/dist/service.js.map +1 -1
  571. package/docs/members.md +83 -0
  572. package/docs/skills.md +50 -0
  573. package/migrations/001_workspaces.sql +53 -0
  574. package/migrations/002_workers.sql +183 -0
  575. package/migrations/003_loops.sql +326 -0
  576. package/migrations/004_inference.sql +360 -0
  577. package/migrations/005_entries.sql +207 -0
  578. package/migrations/006_log.sql +578 -0
  579. package/migrations/007_subscriptions.sql +175 -0
  580. package/migrations/008_interactions.sql +29 -0
  581. package/package.json +33 -40
  582. package/digest-sql/channel-dispositions/dispositions.sql +0 -15
  583. package/digest-sql/channel-state/state.sql +0 -6
  584. package/digest-sql/curation/curation.sql +0 -6
  585. package/digest-sql/derivations/derivations.sql +0 -4
  586. package/digest-sql/embeddings/embeddings.sql +0 -4
  587. package/digest-sql/entry-dispositions/dispositions.sql +0 -15
  588. package/digest-sql/entry-state/state.sql +0 -6
  589. package/digest-sql/token-counts/token-counts.sql +0 -2
  590. package/dist/core/EmbeddingCall.d.ts +0 -23
  591. package/dist/core/EmbeddingCall.d.ts.map +0 -1
  592. package/dist/core/EmbeddingCall.js +0 -149
  593. package/dist/core/EmbeddingCall.js.map +0 -1
  594. package/dist/core/OverflowTurn.d.ts +0 -11
  595. package/dist/core/OverflowTurn.d.ts.map +0 -1
  596. package/dist/core/OverflowTurn.js +0 -80
  597. package/dist/core/OverflowTurn.js.map +0 -1
  598. package/dist/core/Owner.d.ts +0 -8
  599. package/dist/core/Owner.d.ts.map +0 -1
  600. package/dist/core/Owner.js +0 -46
  601. package/dist/core/Owner.js.map +0 -1
  602. package/dist/core/SendBroadcastHandler.d.ts.map +0 -1
  603. package/dist/core/SendBroadcastHandler.js +0 -159
  604. package/dist/core/SendBroadcastHandler.js.map +0 -1
  605. package/dist/core/VectorPump.d.ts +0 -28
  606. package/dist/core/VectorPump.d.ts.map +0 -1
  607. package/dist/core/VectorPump.js +0 -130
  608. package/dist/core/VectorPump.js.map +0 -1
  609. package/dist/core/owner.sql +0 -11
  610. package/dist/core/worker-settings.d.ts +0 -10
  611. package/dist/core/worker-settings.d.ts.map +0 -1
  612. package/dist/core/worker-settings.js +0 -53
  613. package/dist/core/worker-settings.js.map +0 -1
  614. package/dist/schemes/_entry-chunk.d.ts +0 -14
  615. package/dist/schemes/_entry-chunk.d.ts.map +0 -1
  616. package/dist/schemes/_entry-chunk.js +0 -165
  617. package/dist/schemes/_entry-chunk.js.map +0 -1
  618. package/dist/schemes/_entry-semantic.d.ts +0 -63
  619. package/dist/schemes/_entry-semantic.d.ts.map +0 -1
  620. package/dist/schemes/_entry-semantic.js +0 -299
  621. package/dist/schemes/_entry-semantic.js.map +0 -1
  622. package/dist/schemes/_entry-semantic.sql +0 -99
  623. package/dist/schemes/cosine.d.ts +0 -4
  624. package/dist/schemes/cosine.d.ts.map +0 -1
  625. package/dist/schemes/cosine.js +0 -9
  626. package/dist/schemes/cosine.js.map +0 -1
  627. package/dist/server/WorkerCapabilities.d.ts +0 -21
  628. package/dist/server/WorkerCapabilities.d.ts.map +0 -1
  629. package/dist/server/WorkerCapabilities.js.map +0 -1
  630. package/dist/server/WorkerResidency.d.ts +0 -40
  631. package/dist/server/WorkerResidency.d.ts.map +0 -1
  632. package/dist/server/WorkerResidency.js +0 -283
  633. package/dist/server/WorkerResidency.js.map +0 -1
  634. package/dist/server/seam-log-read.sql +0 -21
  635. package/dist/server/worker-capabilities.sql +0 -28
  636. package/migrations/001_schema.sql +0 -2207
@@ -0,0 +1,360 @@
1
+ -- MIGRATE: 4 inference
2
+ -- Chapter 4 of the schema baseline ({§db-schema-baseline}): Inference: logical calls, model responses, emission attempts, physical provider requests.
3
+ -- Version numbers order the chapters on a fresh database; they are not history. A shape
4
+ -- change edits the chapter in place; existing development databases are recreated.
5
+
6
+ -- One logical model call owns its lifecycle and physical-request ledger.
7
+ -- Response and admission evidence specialize this identity. {§tokenomics-provider-usage}
8
+ CREATE TABLE IF NOT EXISTS inference_calls (
9
+ id INTEGER NOT NULL PRIMARY KEY,
10
+ workspace_id INTEGER NOT NULL,
11
+ turn_id INTEGER NOT NULL,
12
+ sequence INTEGER NOT NULL CHECK (sequence >= 1),
13
+ kind TEXT NOT NULL CHECK (kind IN ('emission', 'bare')),
14
+ state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'response', 'error')),
15
+ -- Exact opaque tag set forwarded with generation calls.
16
+ attributions TEXT NOT NULL DEFAULT '[]' CHECK (
17
+ json_valid(attributions) AND json_type(attributions) = 'array'
18
+ ),
19
+ request_model TEXT NOT NULL CHECK (length(request_model) >= 1),
20
+ timestamp TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
21
+ completed_at TEXT,
22
+ CHECK (
23
+ (state = 'pending' AND completed_at IS NULL)
24
+ OR (state IN ('response', 'error') AND completed_at IS NOT NULL)
25
+ ),
26
+ FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE,
27
+ FOREIGN KEY (turn_id) REFERENCES turns(id) ON DELETE CASCADE
28
+ ) STRICT;
29
+
30
+ CREATE UNIQUE INDEX IF NOT EXISTS inference_calls_turn_sequence
31
+ ON inference_calls (turn_id, sequence);
32
+
33
+ CREATE INDEX IF NOT EXISTS inference_calls_workspace_id
34
+ ON inference_calls (workspace_id, timestamp, id);
35
+
36
+ CREATE TRIGGER IF NOT EXISTS inference_calls_open_pending
37
+ BEFORE INSERT ON inference_calls
38
+ WHEN NEW.state != 'pending' OR NEW.completed_at IS NOT NULL
39
+ BEGIN
40
+ SELECT RAISE(ABORT, 'inference call must open pending');
41
+ END;
42
+
43
+ CREATE TRIGGER IF NOT EXISTS inference_calls_context_valid
44
+ BEFORE INSERT ON inference_calls
45
+ WHEN COALESCE((
46
+ SELECT w.workspace_id = NEW.workspace_id
47
+ AND t.producer = 'model' AND t.kind = 'inference'
48
+ FROM turns t
49
+ JOIN loops l ON l.id = t.loop_id
50
+ JOIN workers w ON w.id = l.worker_id
51
+ WHERE t.id = NEW.turn_id
52
+ ), 0) != 1
53
+ BEGIN
54
+ SELECT RAISE(ABORT, 'inference call requires a valid owning workspace and causal context');
55
+ END;
56
+
57
+ CREATE TRIGGER IF NOT EXISTS inference_calls_request_identity_immutable
58
+ BEFORE UPDATE OF workspace_id, turn_id, sequence, kind, attributions, request_model, timestamp
59
+ ON inference_calls
60
+ BEGIN
61
+ SELECT RAISE(ABORT, 'inference call request identity is immutable');
62
+ END;
63
+
64
+ CREATE TRIGGER IF NOT EXISTS inference_calls_state_forward_only
65
+ BEFORE UPDATE OF state ON inference_calls
66
+ WHEN NOT (
67
+ NEW.state = OLD.state
68
+ OR (OLD.state = 'pending' AND NEW.state IN ('response', 'error'))
69
+ )
70
+ BEGIN
71
+ SELECT RAISE(ABORT, 'inference call state may only close once');
72
+ END;
73
+
74
+ CREATE TRIGGER IF NOT EXISTS inference_calls_terminal_evidence_required
75
+ BEFORE UPDATE OF state ON inference_calls
76
+ WHEN NEW.state != OLD.state
77
+ AND NOT (
78
+ (NEW.state = 'response' AND EXISTS (
79
+ SELECT 1 FROM model_calls WHERE id = NEW.id AND response IS NOT NULL
80
+ ))
81
+ OR
82
+ (NEW.state = 'error' AND EXISTS (
83
+ SELECT 1 FROM model_calls WHERE id = NEW.id AND failure IS NOT NULL
84
+ ))
85
+ )
86
+ BEGIN
87
+ SELECT RAISE(ABORT, 'inference call terminal state requires specialization evidence');
88
+ END;
89
+
90
+ CREATE TRIGGER IF NOT EXISTS inference_calls_completion_immutable
91
+ BEFORE UPDATE OF completed_at ON inference_calls
92
+ WHEN OLD.state != 'pending'
93
+ BEGIN
94
+ SELECT RAISE(ABORT, 'inference call completion is immutable');
95
+ END;
96
+
97
+ -- Generation-specific response/failure evidence. The request model and
98
+ -- lifecycle remain on inference_calls; response_model is provider evidence.
99
+ CREATE TABLE IF NOT EXISTS model_calls (
100
+ id INTEGER NOT NULL PRIMARY KEY,
101
+ -- {§packet-attachment-parts}: exact model-facing log coordinates whose
102
+ -- native bytes were present in this completed request. The ordinary READ
103
+ -- result remains independently durable in the log.
104
+ native_inputs TEXT NOT NULL DEFAULT '[]' CHECK (
105
+ json_valid(native_inputs) AND json_type(native_inputs) = 'array'
106
+ ),
107
+ response TEXT CHECK (response IS NULL OR json_valid(response)),
108
+ failure TEXT CHECK (failure IS NULL OR json_valid(failure)),
109
+ capacity TEXT CHECK (
110
+ capacity IS NULL OR (json_valid(capacity) AND json_type(capacity) = 'object')
111
+ ),
112
+ finish_reason TEXT,
113
+ response_model TEXT CHECK (response_model IS NULL OR length(response_model) >= 1),
114
+ CHECK (response IS NULL OR (capacity IS NOT NULL AND response_model IS NOT NULL)),
115
+ CHECK (json_array_length(native_inputs) = 0 OR response IS NOT NULL),
116
+ FOREIGN KEY (id) REFERENCES inference_calls(id) ON DELETE CASCADE
117
+ ) STRICT;
118
+
119
+ CREATE TRIGGER IF NOT EXISTS model_calls_specializes_generation
120
+ BEFORE INSERT ON model_calls
121
+ WHEN COALESCE((
122
+ SELECT kind IN ('emission', 'bare') FROM inference_calls WHERE id = NEW.id
123
+ ), 0) != 1
124
+ BEGIN
125
+ SELECT RAISE(ABORT, 'model call must specialize a generation inference');
126
+ END;
127
+
128
+ CREATE TRIGGER IF NOT EXISTS model_calls_cannot_orphan_inference
129
+ AFTER DELETE ON model_calls
130
+ WHEN EXISTS (SELECT 1 FROM inference_calls WHERE id = OLD.id)
131
+ BEGIN
132
+ SELECT RAISE(ABORT, 'model call specialization cannot be deleted independently');
133
+ END;
134
+
135
+ CREATE TRIGGER IF NOT EXISTS model_calls_observation_pending
136
+ BEFORE UPDATE OF native_inputs, response, failure, capacity, finish_reason, response_model
137
+ ON model_calls
138
+ WHEN COALESCE((SELECT state FROM inference_calls WHERE id = OLD.id), '') != 'pending'
139
+ BEGIN
140
+ SELECT RAISE(ABORT, 'model call observation is immutable');
141
+ END;
142
+
143
+ -- Emission admission specializes one model call without re-owning its response,
144
+ -- provider identity, ordering, or accounting evidence.
145
+ CREATE TABLE IF NOT EXISTS turn_attempts (
146
+ id INTEGER NOT NULL PRIMARY KEY,
147
+ model_call_id INTEGER NOT NULL UNIQUE,
148
+ accepted INTEGER CHECK (accepted IS NULL OR accepted IN (0, 1)),
149
+ parse_errors TEXT NOT NULL DEFAULT '[]' CHECK (
150
+ json_valid(parse_errors) AND json_type(parse_errors) = 'array'
151
+ ),
152
+ FOREIGN KEY (model_call_id) REFERENCES model_calls(id) ON DELETE CASCADE
153
+ ) STRICT;
154
+
155
+ CREATE TRIGGER IF NOT EXISTS turn_attempts_request_identity_immutable
156
+ BEFORE UPDATE OF model_call_id ON turn_attempts
157
+ BEGIN
158
+ SELECT RAISE(ABORT, 'emission attempt identity is immutable');
159
+ END;
160
+
161
+ CREATE TRIGGER IF NOT EXISTS turn_attempts_emission_call_only
162
+ BEFORE INSERT ON turn_attempts
163
+ WHEN COALESCE((SELECT kind = 'emission' FROM inference_calls WHERE id = NEW.model_call_id), 0) != 1
164
+ BEGIN
165
+ SELECT RAISE(ABORT, 'turn attempt requires an emission model call');
166
+ END;
167
+
168
+ CREATE TRIGGER IF NOT EXISTS turn_attempts_classification_after_response
169
+ BEFORE UPDATE OF accepted, parse_errors ON turn_attempts
170
+ WHEN COALESCE((SELECT state = 'response' FROM inference_calls WHERE id = OLD.model_call_id), 0) != 1
171
+ BEGIN
172
+ SELECT RAISE(ABORT, 'emission classification requires model response evidence');
173
+ END;
174
+
175
+ CREATE TRIGGER IF NOT EXISTS turn_attempts_classification_once
176
+ BEFORE UPDATE OF accepted, parse_errors
177
+ ON turn_attempts
178
+ WHEN OLD.accepted IS NOT NULL
179
+ BEGIN
180
+ SELECT RAISE(ABORT, 'emission attempt classification is immutable');
181
+ END;
182
+
183
+ CREATE TRIGGER IF NOT EXISTS turn_attempts_one_accepted_insert
184
+ BEFORE INSERT ON turn_attempts
185
+ WHEN NEW.accepted = 1 AND EXISTS (
186
+ SELECT 1
187
+ FROM turn_attempts existing
188
+ JOIN inference_calls old_call ON old_call.id = existing.model_call_id
189
+ JOIN inference_calls new_call ON new_call.id = NEW.model_call_id
190
+ WHERE old_call.turn_id = new_call.turn_id AND existing.accepted = 1
191
+ )
192
+ BEGIN
193
+ SELECT RAISE(ABORT, 'one emission may be accepted per turn');
194
+ END;
195
+
196
+ CREATE TRIGGER IF NOT EXISTS turn_attempts_one_accepted_update
197
+ BEFORE UPDATE OF accepted ON turn_attempts
198
+ WHEN NEW.accepted = 1 AND EXISTS (
199
+ SELECT 1
200
+ FROM turn_attempts existing
201
+ JOIN inference_calls old_call ON old_call.id = existing.model_call_id
202
+ JOIN inference_calls new_call ON new_call.id = NEW.model_call_id
203
+ WHERE old_call.turn_id = new_call.turn_id
204
+ AND existing.id != OLD.id
205
+ AND existing.accepted = 1
206
+ )
207
+ BEGIN
208
+ SELECT RAISE(ABORT, 'one emission may be accepted per turn');
209
+ END;
210
+
211
+ -- {§provider-request-accounting}: one row is opened before one physical
212
+ -- provider request and settled exactly once with the evidence from that request.
213
+ -- Monetary values remain canonical decimal strings; SQLite REAL is never an
214
+ -- accounting representation.
215
+ CREATE TABLE IF NOT EXISTS provider_requests (
216
+ id INTEGER NOT NULL PRIMARY KEY,
217
+ inference_call_id INTEGER NOT NULL,
218
+ sequence INTEGER NOT NULL CHECK (sequence >= 1),
219
+ provider TEXT NOT NULL CHECK (length(provider) > 0),
220
+ model TEXT NOT NULL CHECK (length(model) > 0),
221
+ state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'settled')),
222
+ outcome TEXT CHECK (outcome IN ('response', 'error')),
223
+ status INTEGER CHECK (status IS NULL OR status BETWEEN 100 AND 599),
224
+ usage_input INTEGER CHECK (usage_input IS NULL OR usage_input >= 0),
225
+ usage_output INTEGER CHECK (usage_output IS NULL OR usage_output >= 0),
226
+ usage_total INTEGER CHECK (usage_total IS NULL OR usage_total >= 0),
227
+ usage_input_no_cache INTEGER CHECK (usage_input_no_cache IS NULL OR usage_input_no_cache >= 0),
228
+ usage_input_cache_read INTEGER CHECK (usage_input_cache_read IS NULL OR usage_input_cache_read >= 0),
229
+ usage_input_cache_write INTEGER CHECK (usage_input_cache_write IS NULL OR usage_input_cache_write >= 0),
230
+ usage_output_text INTEGER CHECK (usage_output_text IS NULL OR usage_output_text >= 0),
231
+ usage_output_reasoning INTEGER CHECK (usage_output_reasoning IS NULL OR usage_output_reasoning >= 0),
232
+ cost_kind TEXT CHECK (cost_kind IN ('charged', 'estimated', 'unknown')),
233
+ cost_amount TEXT,
234
+ cost_currency TEXT,
235
+ cost_usd_equivalent TEXT,
236
+ cost_source TEXT,
237
+ cost_reason TEXT,
238
+ started_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
239
+ completed_at TEXT,
240
+ CHECK (
241
+ (state = 'pending'
242
+ AND outcome IS NULL AND status IS NULL
243
+ AND usage_input IS NULL AND usage_output IS NULL AND usage_total IS NULL
244
+ AND usage_input_no_cache IS NULL AND usage_input_cache_read IS NULL
245
+ AND usage_input_cache_write IS NULL AND usage_output_text IS NULL
246
+ AND usage_output_reasoning IS NULL
247
+ AND cost_kind IS NULL AND cost_amount IS NULL AND cost_currency IS NULL
248
+ AND cost_usd_equivalent IS NULL AND cost_source IS NULL AND cost_reason IS NULL
249
+ AND completed_at IS NULL)
250
+ OR
251
+ (state = 'settled' AND outcome IS NOT NULL AND cost_kind IS NOT NULL AND completed_at IS NOT NULL)
252
+ ),
253
+ CHECK (
254
+ cost_amount IS NULL OR (
255
+ length(cost_amount) > 0
256
+ AND cost_amount NOT GLOB '*[^0-9.]*'
257
+ AND cost_amount NOT LIKE '.%'
258
+ AND cost_amount NOT LIKE '%.'
259
+ AND cost_amount NOT LIKE '%.%.%'
260
+ AND (cost_amount = '0' OR cost_amount NOT GLOB '0[0-9]*')
261
+ )
262
+ ),
263
+ CHECK (
264
+ cost_usd_equivalent IS NULL OR (
265
+ length(cost_usd_equivalent) > 0
266
+ AND cost_usd_equivalent NOT GLOB '*[^0-9.]*'
267
+ AND cost_usd_equivalent NOT LIKE '.%'
268
+ AND cost_usd_equivalent NOT LIKE '%.'
269
+ AND cost_usd_equivalent NOT LIKE '%.%.%'
270
+ AND (cost_usd_equivalent = '0' OR cost_usd_equivalent NOT GLOB '0[0-9]*')
271
+ )
272
+ ),
273
+ CHECK (
274
+ cost_currency IS NULL OR (
275
+ length(cost_currency) BETWEEN 3 AND 12
276
+ AND substr(cost_currency, 1, 1) GLOB '[A-Z]'
277
+ AND cost_currency NOT GLOB '*[^A-Z0-9]*'
278
+ )
279
+ ),
280
+ CHECK (
281
+ cost_kind IS NULL
282
+ OR (cost_kind = 'charged'
283
+ AND cost_amount IS NOT NULL AND cost_currency IS NOT NULL
284
+ AND cost_source IS NOT NULL AND length(cost_source) > 0
285
+ AND cost_reason IS NULL)
286
+ OR (cost_kind = 'estimated'
287
+ AND cost_amount IS NOT NULL AND cost_currency IS NOT NULL
288
+ AND cost_usd_equivalent IS NULL
289
+ AND cost_source IS NOT NULL AND length(cost_source) > 0
290
+ AND cost_reason IS NULL)
291
+ OR (cost_kind = 'unknown'
292
+ AND cost_amount IS NULL AND cost_currency IS NULL
293
+ AND cost_usd_equivalent IS NULL AND cost_source IS NULL
294
+ AND cost_reason IS NOT NULL AND length(cost_reason) > 0)
295
+ ),
296
+ UNIQUE (inference_call_id, sequence),
297
+ FOREIGN KEY (inference_call_id) REFERENCES inference_calls(id) ON DELETE CASCADE
298
+ ) STRICT;
299
+
300
+ CREATE TRIGGER IF NOT EXISTS provider_requests_pending_inference_only
301
+ BEFORE INSERT ON provider_requests
302
+ WHEN COALESCE((SELECT state = 'pending' FROM inference_calls WHERE id = NEW.inference_call_id), 0) != 1
303
+ BEGIN
304
+ SELECT RAISE(ABORT, 'provider request requires a pending inference call');
305
+ END;
306
+
307
+ CREATE TRIGGER IF NOT EXISTS provider_requests_identity_immutable
308
+ BEFORE UPDATE OF inference_call_id, sequence, provider, model, started_at
309
+ ON provider_requests
310
+ BEGIN
311
+ SELECT RAISE(ABORT, 'provider request identity is immutable');
312
+ END;
313
+
314
+ CREATE TRIGGER IF NOT EXISTS provider_requests_state_forward_only
315
+ BEFORE UPDATE OF state ON provider_requests
316
+ WHEN NOT (NEW.state = OLD.state OR (OLD.state = 'pending' AND NEW.state = 'settled'))
317
+ BEGIN
318
+ SELECT RAISE(ABORT, 'provider request may only settle once');
319
+ END;
320
+
321
+ CREATE TRIGGER IF NOT EXISTS provider_requests_settlement_immutable
322
+ BEFORE UPDATE OF outcome, status,
323
+ usage_input, usage_output, usage_total,
324
+ usage_input_no_cache, usage_input_cache_read, usage_input_cache_write,
325
+ usage_output_text, usage_output_reasoning,
326
+ cost_kind, cost_amount, cost_currency, cost_usd_equivalent,
327
+ cost_source, cost_reason, completed_at
328
+ ON provider_requests
329
+ WHEN OLD.state != 'pending'
330
+ BEGIN
331
+ SELECT RAISE(ABORT, 'provider request settlement is immutable');
332
+ END;
333
+
334
+ CREATE TRIGGER IF NOT EXISTS model_calls_native_inputs_valid
335
+ BEFORE UPDATE OF native_inputs ON model_calls
336
+ WHEN (
337
+ SELECT COUNT(*) != COUNT(DISTINCT value)
338
+ OR SUM(CASE WHEN type != 'text' OR length(value) = 0 THEN 1 ELSE 0 END) > 0
339
+ FROM json_each(NEW.native_inputs)
340
+ )
341
+ OR EXISTS (
342
+ SELECT 1
343
+ FROM json_each(NEW.native_inputs) native
344
+ WHERE NOT EXISTS (
345
+ SELECT 1
346
+ FROM inference_calls call
347
+ JOIN turns request_turn ON request_turn.id = call.turn_id
348
+ JOIN loops request_loop ON request_loop.id = request_turn.loop_id
349
+ JOIN log_entries entry ON entry.worker_id = request_loop.worker_id
350
+ JOIN turns entry_turn ON entry_turn.id = entry.turn_id
351
+ JOIN loops entry_loop ON entry_loop.id = entry_turn.loop_id
352
+ WHERE call.id = NEW.id
353
+ AND entry.op = 'READ'
354
+ AND entry.status_rx < 400
355
+ AND (entry_loop.sequence || '/' || entry_turn.sequence || '/' || entry.sequence) = native.value
356
+ )
357
+ )
358
+ BEGIN
359
+ SELECT RAISE(ABORT, 'model call native inputs must be unique successful READ coordinates owned by its worker');
360
+ END;
@@ -0,0 +1,207 @@
1
+ -- MIGRATE: 5 entries
2
+ -- Chapter 5 of the schema baseline ({§db-schema-baseline}): Entries and their channels, derivations and the search artifacts over them, native content.
3
+ -- Version numbers order the chapters on a fresh database; they are not history. A shape
4
+ -- change edits the chapter in place; existing development databases are recreated.
5
+
6
+ -- derivations
7
+ -- Content-addressed deep projections. Entry channels and log projections point
8
+ -- at a COMPLETE artifact by deep_hash; graph and FTS are stored once
9
+ -- regardless of how many addresses carry identical content under the same reader/config.
10
+ -- A building row is unattached and safely replaceable after interruption.
11
+ CREATE TABLE IF NOT EXISTS derivations (
12
+ id INTEGER NOT NULL PRIMARY KEY,
13
+ deep_hash TEXT NOT NULL UNIQUE CHECK (length(deep_hash) > 0),
14
+ state TEXT NOT NULL DEFAULT 'building' CHECK (state IN ('building', 'complete')),
15
+ disposition TEXT CHECK (disposition IN ('indexed', 'excluded', 'unsearchable', 'failed')),
16
+ reason TEXT,
17
+ parse_issues INTEGER CHECK (parse_issues IS NULL OR parse_issues > 0),
18
+ summary TEXT CHECK (
19
+ summary IS NULL OR (
20
+ length(summary) > 0
21
+ AND summary = trim(summary)
22
+ AND instr(summary, char(10)) = 0
23
+ AND instr(summary, char(13)) = 0
24
+ )
25
+ ),
26
+ CHECK ((state = 'building' AND disposition IS NULL) OR (state = 'complete' AND disposition IS NOT NULL))
27
+ ) STRICT;
28
+
29
+ -- entries
30
+ -- {§entry-identity-no-null} A resource belongs directly to its workspace.
31
+ -- Actor attribution and subscriptions do not participate in its address.
32
+ CREATE TABLE IF NOT EXISTS entries (
33
+ id INTEGER NOT NULL PRIMARY KEY,
34
+ version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
35
+ scheme TEXT NOT NULL CHECK (length(scheme) > 0),
36
+ -- Canonical resource authority; namespace schemes fold it into pathname.
37
+ authority TEXT NOT NULL DEFAULT '',
38
+ pathname TEXT NOT NULL,
39
+ workspace_id INTEGER NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
40
+ -- Entry-private metadata. Prompt frames use `openPaths` to carry selected
41
+ -- workspace paths into the exact turn that publishes the frame
42
+ -- ({§methods-loop-run-open-paths}).
43
+ attributes TEXT NOT NULL DEFAULT '{}' CHECK (json_valid(attributes)),
44
+ default_channel TEXT NOT NULL DEFAULT 'body' CHECK (length(default_channel) > 0),
45
+ output INTEGER NOT NULL DEFAULT 0 CHECK (output IN (0, 1)),
46
+ -- SPEC {§membership} — how a file member entered the curated surface. 'git' rows are
47
+ -- reconciled against the repo's members each turn — tracked ls-files PLUS untracked-
48
+ -- but-not-ignored files ({§membership-auto-add}) — registered + un-registered so entries
49
+ -- == members; 'constraint' rows are reconciled from ordinary pick policy.
50
+ -- NULL = not a file member (other schemes don't carry origin).
51
+ membership_origin TEXT CHECK (membership_origin IS NULL OR membership_origin IN ('git', 'constraint')),
52
+ -- SPEC {§membership-change-gated-sync} — the per-member sync stat-detect:
53
+ -- "<mtimeMs>:<size>" of the disk file at its last materialization, or `absent`
54
+ -- after an observed deletion. The pre-turn
55
+ -- sync stat()s every member but re-reads/re-tokenizes/rewrites only one whose
56
+ -- signature changed; an unchanged member is a no-op. NULL = never synced.
57
+ synced_sig TEXT,
58
+ -- User Note 5 — manifest cache-friendliness. Last-modified stamp, bumped on every
59
+ -- addressable representation change; engine_list_workspace_entries orders the catalog
60
+ -- by it ASC so dormant entries hold the stable prompt-cache prefix. Private derivation
61
+ -- attachment does not make an entry recently touched.
62
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
63
+ ) STRICT;
64
+
65
+ -- {§entry-owner}, {§execution-output-identity}: one canonical resource key.
66
+ CREATE UNIQUE INDEX IF NOT EXISTS entries_identity ON entries (workspace_id, scheme, authority, pathname);
67
+
68
+ -- The ONE engine-imposed constraint (SPEC {§stream-constraints}, {§stream-constraints-engine-one-cap}): 100 MiB char-length cap
69
+ -- per channel content body. All other limits are extrinsic.
70
+ CREATE TABLE IF NOT EXISTS entry_channels (
71
+ entry_id INTEGER NOT NULL,
72
+ name TEXT NOT NULL CHECK (length(name) > 0),
73
+ content TEXT NOT NULL CHECK (length(content) <= 104857600),
74
+ mimetype TEXT NOT NULL CHECK (length(mimetype) > 0),
75
+ weight INTEGER NOT NULL DEFAULT 0 CHECK (weight >= 0),
76
+ -- Content identity: sha256 of content, stamped at static writes; streamed
77
+ -- appends leave it NULL. Curation weight remains model-independent.
78
+ content_hash TEXT,
79
+ -- Search derivation for this exact addressable channel representation.
80
+ -- Content or mimetype changes invalidate it at the owning channel row.
81
+ deep_hash TEXT,
82
+ state TEXT NOT NULL DEFAULT 'static' CHECK (state IN ('static', 'active', 'closed', 'errored')),
83
+ -- Exact terminal producer evidence for this representation channel. NULL is
84
+ -- the ordinary implicit {status:200}; selection/projection metadata belongs
85
+ -- to core and is never stored here.
86
+ producer_result TEXT,
87
+ CONSTRAINT entry_channel_producer_result_contract CHECK (
88
+ CASE
89
+ WHEN producer_result IS NULL THEN 1
90
+ WHEN NOT json_valid(producer_result) THEN 0
91
+ ELSE
92
+ json_type(producer_result) IS 'object'
93
+ AND json_type(producer_result, '$.status') IS 'integer'
94
+ AND json_extract(producer_result, '$.status') BETWEEN 200 AND 599
95
+ AND json_extract(producer_result, '$.status') != 202
96
+ AND CASE
97
+ WHEN json_extract(producer_result, '$.status') < 400 THEN
98
+ json_type(producer_result, '$.problem') IS NULL
99
+ ELSE
100
+ json_type(producer_result, '$.problem') IS 'object'
101
+ AND json_type(producer_result, '$.problem.status') IS 'integer'
102
+ AND json_extract(producer_result, '$.problem.status')
103
+ = json_extract(producer_result, '$.status')
104
+ AND json_type(producer_result, '$.problem.type') IS 'text'
105
+ AND length(json_extract(producer_result, '$.problem.type')) > 0
106
+ AND json_type(producer_result, '$.problem.title') IS 'text'
107
+ AND length(json_extract(producer_result, '$.problem.title')) > 0
108
+ AND json_type(producer_result, '$.problem.detail') IS 'text'
109
+ AND length(json_extract(producer_result, '$.problem.detail')) > 0
110
+ END
111
+ END
112
+ ),
113
+ PRIMARY KEY (entry_id, name),
114
+ FOREIGN KEY (entry_id) REFERENCES entries(id) ON DELETE CASCADE,
115
+ FOREIGN KEY (deep_hash) REFERENCES derivations(deep_hash)
116
+ ) STRICT, WITHOUT ROWID;
117
+
118
+ -- {§db-fk-indexes} Derivation replacement checks channels by hash; catalog joins drive on it too.
119
+ CREATE INDEX IF NOT EXISTS entry_channels_deep_hash ON entry_channels (deep_hash) WHERE deep_hash IS NOT NULL;
120
+
121
+ -- {§crud} A publication is one SQL statement: failure rolls back metadata and
122
+ -- every channel. The view is an input boundary, not a second persisted copy.
123
+ CREATE VIEW IF NOT EXISTS entry_publication AS
124
+ SELECT NULL AS workspace_id, NULL AS scheme, NULL AS authority, NULL AS pathname,
125
+ NULL AS attributes, NULL AS default_channel, NULL AS output,
126
+ NULL AS channels, NULL AS created
127
+ WHERE 0;
128
+
129
+ CREATE TRIGGER IF NOT EXISTS entry_publication_insert
130
+ INSTEAD OF INSERT ON entry_publication
131
+ BEGIN
132
+ SELECT CASE WHEN json_type(NEW.channels) IS NOT 'object'
133
+ THEN RAISE(ABORT, 'entry publication requires a channel object') END;
134
+ INSERT INTO entries (workspace_id, scheme, authority, pathname, attributes, default_channel, output)
135
+ VALUES (NEW.workspace_id, NEW.scheme, NEW.authority, NEW.pathname,
136
+ COALESCE(NEW.attributes, '{}'), NEW.default_channel, NEW.output)
137
+ ON CONFLICT (workspace_id, scheme, authority, pathname) DO UPDATE SET
138
+ attributes = COALESCE(NEW.attributes, entries.attributes),
139
+ default_channel = excluded.default_channel,
140
+ output = MAX(entries.output, excluded.output);
141
+ DELETE FROM entry_channels WHERE entry_id = (
142
+ SELECT id FROM entries WHERE workspace_id = NEW.workspace_id
143
+ AND scheme = NEW.scheme AND authority = NEW.authority AND pathname = NEW.pathname
144
+ );
145
+ INSERT INTO entry_channels (entry_id, name, content, mimetype, weight, content_hash, state, producer_result)
146
+ SELECT e.id, c.key, json_extract(c.value, '$.content'), json_extract(c.value, '$.mimetype'),
147
+ json_extract(c.value, '$.weight'), json_extract(c.value, '$.content_hash'),
148
+ json_extract(c.value, '$.state'), json_extract(c.value, '$.producer_result')
149
+ FROM entries e, json_each(NEW.channels) c
150
+ WHERE e.workspace_id = NEW.workspace_id AND e.scheme = NEW.scheme
151
+ AND e.authority = NEW.authority AND e.pathname = NEW.pathname;
152
+ END;
153
+
154
+ -- symbol_defs
155
+ -- &graph NODES ({§relation-indexed-dialects}). Code symbol definitions, populated
156
+ -- once per content-addressed derivation from mimetypes'
157
+ -- `symbols` channel. Qualified path = container ? container || '.' || name : name.
158
+ CREATE TABLE IF NOT EXISTS symbol_defs (
159
+ id INTEGER NOT NULL PRIMARY KEY,
160
+ derivation_id INTEGER NOT NULL,
161
+ name TEXT NOT NULL CHECK (length(name) > 0),
162
+ kind TEXT NOT NULL,
163
+ container TEXT,
164
+ line INTEGER NOT NULL,
165
+ end_line INTEGER,
166
+ FOREIGN KEY (derivation_id) REFERENCES derivations(id) ON DELETE CASCADE
167
+ ) STRICT;
168
+
169
+ CREATE INDEX IF NOT EXISTS symbol_defs_name ON symbol_defs (name);
170
+
171
+ -- {§db-fk-indexes} Reindexing deletes a derivation's definitions by derivation; mirrors symbol_refs_source.
172
+ CREATE INDEX IF NOT EXISTS symbol_defs_source ON symbol_defs (derivation_id);
173
+
174
+ -- symbol_refs
175
+ -- &graph EDGES ({§relation-indexed-dialects}), from mimetypes' `references` channel.
176
+ -- name = edge TARGET; container = the SOURCE def's full qualified path (the
177
+ -- &> join key; module-level → NULL); kind ∈ import|call|instantiate|inherit|
178
+ -- type|use (frozen, edge metadata only — traversal is kind-agnostic).
179
+ CREATE TABLE IF NOT EXISTS symbol_refs (
180
+ id INTEGER NOT NULL PRIMARY KEY,
181
+ derivation_id INTEGER NOT NULL,
182
+ name TEXT NOT NULL CHECK (length(name) > 0),
183
+ kind TEXT NOT NULL,
184
+ container TEXT,
185
+ line INTEGER NOT NULL,
186
+ FOREIGN KEY (derivation_id) REFERENCES derivations(id) ON DELETE CASCADE
187
+ ) STRICT;
188
+
189
+ CREATE INDEX IF NOT EXISTS symbol_refs_name ON symbol_refs (name);
190
+
191
+ CREATE INDEX IF NOT EXISTS symbol_refs_source ON symbol_refs (derivation_id, container);
192
+
193
+ -- {§find-fulltext-selection} Native full-text index of the addressed READ body.
194
+ -- rowid is the content-addressed derivation id.
195
+ CREATE VIRTUAL TABLE IF NOT EXISTS derivation_fts USING fts5(content);
196
+
197
+ -- {§packet-attachment-parts}: READ snapshots survive source changes and log curation.
198
+ CREATE TABLE IF NOT EXISTS native_contents (
199
+ hash TEXT NOT NULL PRIMARY KEY CHECK (length(hash) = 64),
200
+ content BLOB NOT NULL
201
+ ) STRICT, WITHOUT ROWID;
202
+
203
+ CREATE TRIGGER IF NOT EXISTS native_contents_immutable
204
+ BEFORE UPDATE ON native_contents
205
+ BEGIN
206
+ SELECT RAISE(ABORT, 'native content is immutable');
207
+ END;