spawnfile 0.1.14 → 0.1.18

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 (873) hide show
  1. package/README.md +60 -159
  2. package/dist/audit/checksShared.d.ts +1 -1
  3. package/dist/auth/importers.d.ts +10 -0
  4. package/dist/auth/importers.js +46 -5
  5. package/dist/auth/index.d.ts +3 -0
  6. package/dist/auth/index.js +2 -0
  7. package/dist/auth/paths.d.ts +1 -1
  8. package/dist/auth/profileStore.js +13 -10
  9. package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
  10. package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
  11. package/dist/auth/targetSecretSourceFsPublish.d.ts +2 -0
  12. package/dist/auth/targetSecretSourceFsPublish.js +3 -1
  13. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +2 -1
  14. package/dist/auth/targetSecretSourceFsPublishImmutable.js +104 -71
  15. package/dist/auth/targetSecretSourceFsRead.js +5 -14
  16. package/dist/auth/trainingAuth.d.ts +21 -0
  17. package/dist/auth/trainingAuth.js +86 -0
  18. package/dist/auth/trainingGrokWriteback.d.ts +4 -0
  19. package/dist/auth/trainingGrokWriteback.js +119 -0
  20. package/dist/auth/trainingGrokWritebackLock.d.ts +5 -0
  21. package/dist/auth/trainingGrokWritebackLock.js +56 -0
  22. package/dist/auth/types.d.ts +1 -1
  23. package/dist/cli/authCommands.d.ts +1 -1
  24. package/dist/cli/authCommands.js +18 -5
  25. package/dist/cli/canaryCutoverCommand.d.ts +2 -0
  26. package/dist/cli/canaryCutoverCommand.js +30 -0
  27. package/dist/cli/capabilitiesCommand.d.ts +3 -0
  28. package/dist/cli/capabilitiesCommand.js +12 -0
  29. package/dist/cli/capabilitiesReceipt.d.ts +56 -0
  30. package/dist/cli/capabilitiesReceipt.js +56 -0
  31. package/dist/cli/compileBuildCommands.js +17 -0
  32. package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
  33. package/dist/cli/composedLifecycleContractSet.js +204 -0
  34. package/dist/cli/devCommands.js +6 -2
  35. package/dist/cli/downCommand.d.ts +2 -0
  36. package/dist/cli/downCommand.js +22 -8
  37. package/dist/cli/envFileOption.d.ts +18 -0
  38. package/dist/cli/envFileOption.js +20 -0
  39. package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
  40. package/dist/cli/evidenceExportHelperCommand.js +51 -0
  41. package/dist/cli/index.js +12 -3
  42. package/dist/cli/lifecycleCommands.d.ts +1 -1
  43. package/dist/cli/lifecycleCommands.js +3 -1
  44. package/dist/cli/lifecycleMachine.d.ts +7 -1
  45. package/dist/cli/lifecycleMachine.js +2 -2
  46. package/dist/cli/lifecyclePlan.d.ts +1 -0
  47. package/dist/cli/lifecyclePlan.js +2 -0
  48. package/dist/cli/paideiaDelegation.d.ts +18 -0
  49. package/dist/cli/paideiaDelegation.js +211 -0
  50. package/dist/cli/paideiaSupervisor.d.ts +17 -0
  51. package/dist/cli/paideiaSupervisor.js +48 -0
  52. package/dist/cli/productStateCloneCommand.d.ts +2 -0
  53. package/dist/cli/productStateCloneCommand.js +34 -0
  54. package/dist/cli/recordCommands.d.ts +17 -0
  55. package/dist/cli/recordCommands.js +43 -0
  56. package/dist/cli/releaseCommand.d.ts +6 -0
  57. package/dist/cli/releaseCommand.js +91 -0
  58. package/dist/cli/runCli.d.ts +19 -3
  59. package/dist/cli/runCli.js +43 -10
  60. package/dist/cli/runPublishCommands.js +5 -3
  61. package/dist/cli/targetCommands.d.ts +4 -7
  62. package/dist/cli/targetCommands.js +16 -46
  63. package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
  64. package/dist/cli/targetConfigPreparedPlan.js +74 -0
  65. package/dist/cli/targetConfigResolver.d.ts +3 -0
  66. package/dist/cli/targetConfigResolver.js +111 -0
  67. package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
  68. package/dist/cli/targetConfigResolverCommand.js +43 -0
  69. package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
  70. package/dist/cli/targetConfigResolverContracts.js +30 -0
  71. package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
  72. package/dist/cli/targetConfigResolverDocker.js +47 -0
  73. package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
  74. package/dist/cli/targetConfigResolverValidation.js +94 -0
  75. package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
  76. package/dist/cli/targetDefaultAuthorities.js +3 -0
  77. package/dist/cli/targetDefaultConfig.d.ts +7 -0
  78. package/dist/cli/targetDefaultConfig.js +22 -5
  79. package/dist/cli/targetDefaultConfigStdin.js +7 -1
  80. package/dist/cli/targetDefaultHandlerFactory.js +23 -2
  81. package/dist/cli/targetDefaultHandlers.d.ts +2 -2
  82. package/dist/cli/targetProductionCommands.d.ts +5 -0
  83. package/dist/cli/targetProductionCommands.js +45 -0
  84. package/dist/cli/trainCommand.d.ts +3 -0
  85. package/dist/cli/trainCommand.js +114 -0
  86. package/dist/cli/upCommand.js +40 -7
  87. package/dist/cli/upLifecycleRecovery.d.ts +2 -2
  88. package/dist/cli/upLifecycleRecovery.js +188 -44
  89. package/dist/cli/usageCommand.d.ts +40 -0
  90. package/dist/cli/usageCommand.js +284 -0
  91. package/dist/cli/usageCommandLive.d.ts +84 -0
  92. package/dist/cli/usageCommandLive.js +95 -0
  93. package/dist/cli/usageDeploymentSource.d.ts +9 -0
  94. package/dist/cli/usageDeploymentSource.js +22 -0
  95. package/dist/cli/volumeCommands.d.ts +8 -0
  96. package/dist/cli/volumeCommands.js +53 -0
  97. package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
  98. package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
  99. package/dist/compiler/agentNodeMerge.js +3 -2
  100. package/dist/compiler/buildCompilePlan.js +4 -0
  101. package/dist/compiler/buildCompilePlanAgent.js +3 -1
  102. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
  103. package/dist/compiler/buildCompilePlanTeams.js +6 -1
  104. package/dist/compiler/buildCompilePlanTraversal.js +2 -0
  105. package/dist/compiler/buildCompilePlanTraversalHelpers.d.ts +2 -2
  106. package/dist/compiler/buildCompilePlanTraversalHelpers.js +4 -3
  107. package/dist/compiler/buildProject.d.ts +10 -0
  108. package/dist/compiler/buildProject.js +14 -2
  109. package/dist/compiler/cleanCompileOutput.d.ts +2 -0
  110. package/dist/compiler/cleanCompileOutput.js +14 -0
  111. package/dist/compiler/compilePlanHelpers.js +5 -0
  112. package/dist/compiler/compileProject.d.ts +12 -0
  113. package/dist/compiler/compileProject.js +33 -3
  114. package/dist/compiler/compileProjectSupport.js +9 -0
  115. package/dist/compiler/containerArtifactSummaries.js +1 -0
  116. package/dist/compiler/containerArtifacts.d.ts +7 -5
  117. package/dist/compiler/containerArtifacts.js +77 -41
  118. package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
  119. package/dist/compiler/containerArtifactsPlans.js +31 -7
  120. package/dist/compiler/containerArtifactsRender.d.ts +2 -1
  121. package/dist/compiler/containerArtifactsRender.js +91 -58
  122. package/dist/compiler/containerArtifactsTypes.d.ts +15 -0
  123. package/dist/compiler/containerBackedMountRender.d.ts +56 -0
  124. package/dist/compiler/containerBackedMountRender.js +101 -0
  125. package/dist/compiler/containerDaimonBrokerRender.d.ts +114 -0
  126. package/dist/compiler/containerDaimonBrokerRender.js +194 -0
  127. package/dist/compiler/containerDaimonGrokTaskClock.d.ts +5 -0
  128. package/dist/compiler/containerDaimonGrokTaskClock.js +29 -0
  129. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
  130. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +130 -0
  131. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +197 -0
  132. package/dist/compiler/containerDaimonGrokWorkerRender.js +281 -0
  133. package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +25 -0
  134. package/dist/compiler/containerDaimonOwnershipGuardRender.js +204 -0
  135. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
  136. package/dist/compiler/containerDaimonUidEntrypointRender.js +291 -0
  137. package/dist/compiler/containerEntrypointRender.d.ts +7 -0
  138. package/dist/compiler/containerEntrypointRender.js +28 -22
  139. package/dist/compiler/containerPersistentMounts.d.ts +30 -0
  140. package/dist/compiler/containerPersistentMounts.js +66 -0
  141. package/dist/compiler/containerReadinessPaths.d.ts +1 -0
  142. package/dist/compiler/containerReadinessPaths.js +1 -0
  143. package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
  144. package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
  145. package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
  146. package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
  147. package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
  148. package/dist/compiler/containerStateOwnershipRender.js +75 -0
  149. package/dist/compiler/containerTargetResources.d.ts +32 -1
  150. package/dist/compiler/containerTargetResources.js +115 -15
  151. package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
  152. package/dist/compiler/containerVolumeBootstrap.js +3 -0
  153. package/dist/compiler/containerWorkspaceResourceRender.js +52 -1
  154. package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
  155. package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
  156. package/dist/compiler/deploymentLineage.d.ts +40 -0
  157. package/dist/compiler/deploymentLineage.js +50 -0
  158. package/dist/compiler/index.d.ts +5 -0
  159. package/dist/compiler/index.js +5 -0
  160. package/dist/compiler/initProject.d.ts +2 -0
  161. package/dist/compiler/initProject.js +39 -1
  162. package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
  163. package/dist/compiler/localMoltnetAuthority.js +177 -0
  164. package/dist/compiler/mcpPlaceholders.d.ts +11 -0
  165. package/dist/compiler/mcpPlaceholders.js +58 -0
  166. package/dist/compiler/mcpServerInheritance.d.ts +18 -0
  167. package/dist/compiler/mcpServerInheritance.js +43 -0
  168. package/dist/compiler/memoryArtifacts.d.ts +1 -1
  169. package/dist/compiler/memoryArtifacts.js +108 -32
  170. package/dist/compiler/modelEnv.d.ts +5 -0
  171. package/dist/compiler/modelEnv.js +8 -2
  172. package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
  173. package/dist/compiler/moltnetArtifactPaths.js +17 -15
  174. package/dist/compiler/moltnetArtifactTypes.d.ts +11 -0
  175. package/dist/compiler/moltnetArtifacts.d.ts +1 -1
  176. package/dist/compiler/moltnetArtifacts.js +53 -12
  177. package/dist/compiler/moltnetBinaries.d.ts +16 -4
  178. package/dist/compiler/moltnetBinaries.js +46 -6
  179. package/dist/compiler/moltnetClientConfig.js +1 -1
  180. package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
  181. package/dist/compiler/moltnetConfigLowering.js +30 -6
  182. package/dist/compiler/moltnetNodeConfig.js +1 -1
  183. package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
  184. package/dist/compiler/moltnetReleaseAuthority.js +33 -4
  185. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
  186. package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
  187. package/dist/compiler/moltnetResolution.js +9 -15
  188. package/dist/compiler/moltnetRoomMemberships.js +20 -5
  189. package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
  190. package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
  191. package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
  192. package/dist/compiler/moltnetRuntimeConfig.js +22 -2
  193. package/dist/compiler/moltnetServerPlans.js +19 -0
  194. package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
  195. package/dist/compiler/organizationExternalParticipants.js +176 -0
  196. package/dist/compiler/organizationIdentity.d.ts +3 -9
  197. package/dist/compiler/organizationIdentity.js +37 -270
  198. package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
  199. package/dist/compiler/organizationIdentityGraph.js +115 -0
  200. package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
  201. package/dist/compiler/organizationReadyEvidence.js +23 -3
  202. package/dist/compiler/preflightCompilePlan.d.ts +9 -0
  203. package/dist/compiler/preflightCompilePlan.js +38 -0
  204. package/dist/compiler/recordingAgentFacts.d.ts +4 -0
  205. package/dist/compiler/recordingAgentFacts.js +35 -0
  206. package/dist/compiler/recordingCapability.d.ts +4 -0
  207. package/dist/compiler/recordingCapability.js +22 -0
  208. package/dist/compiler/recordingReport.d.ts +4 -0
  209. package/dist/compiler/recordingReport.js +18 -0
  210. package/dist/compiler/runProject.d.ts +6 -3
  211. package/dist/compiler/runProject.js +34 -6
  212. package/dist/compiler/runProjectAuth.d.ts +3 -1
  213. package/dist/compiler/runProjectAuth.js +19 -3
  214. package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
  215. package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
  216. package/dist/compiler/runProjectDocker.d.ts +8 -4
  217. package/dist/compiler/runProjectDocker.js +43 -18
  218. package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
  219. package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
  220. package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
  221. package/dist/compiler/runProjectDockerReservation.js +118 -0
  222. package/dist/compiler/runProjectLifecycle.js +1 -1
  223. package/dist/compiler/surfaces.d.ts +1 -2
  224. package/dist/compiler/surfaces.js +0 -1
  225. package/dist/compiler/syncProjectAuth.js +2 -1
  226. package/dist/compiler/training/broker/clockProbe.d.ts +6 -0
  227. package/dist/compiler/training/broker/clockProbe.js +27 -0
  228. package/dist/compiler/training/broker/declaration.d.ts +47 -0
  229. package/dist/compiler/training/broker/declaration.js +57 -0
  230. package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
  231. package/dist/compiler/training/broker/entrypoint.js +126 -0
  232. package/dist/compiler/training/broker/evaluatorSecrets.d.ts +2 -0
  233. package/dist/compiler/training/broker/evaluatorSecrets.js +60 -0
  234. package/dist/compiler/training/broker/index.d.ts +11 -0
  235. package/dist/compiler/training/broker/index.js +11 -0
  236. package/dist/compiler/training/broker/main.d.ts +2 -0
  237. package/dist/compiler/training/broker/main.js +14 -0
  238. package/dist/compiler/training/broker/paths.d.ts +236 -0
  239. package/dist/compiler/training/broker/paths.js +249 -0
  240. package/dist/compiler/training/broker/processes.d.ts +51 -0
  241. package/dist/compiler/training/broker/processes.js +102 -0
  242. package/dist/compiler/training/broker/projection.d.ts +52 -0
  243. package/dist/compiler/training/broker/projection.js +88 -0
  244. package/dist/compiler/training/broker/provisioning.d.ts +78 -0
  245. package/dist/compiler/training/broker/provisioning.js +231 -0
  246. package/dist/compiler/training/broker/receipt.d.ts +77 -0
  247. package/dist/compiler/training/broker/receipt.js +110 -0
  248. package/dist/compiler/training/broker/registration.d.ts +43 -0
  249. package/dist/compiler/training/broker/registration.js +110 -0
  250. package/dist/compiler/training/broker/reset.d.ts +9 -0
  251. package/dist/compiler/training/broker/reset.js +71 -0
  252. package/dist/compiler/training/broker/runtime.d.ts +22 -0
  253. package/dist/compiler/training/broker/runtime.js +127 -0
  254. package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
  255. package/dist/compiler/training/broker/seccompRoutes.js +36 -0
  256. package/dist/compiler/training/broker/supervisor.d.ts +108 -0
  257. package/dist/compiler/training/broker/supervisor.js +172 -0
  258. package/dist/compiler/training/broker/taskClock.d.ts +5 -0
  259. package/dist/compiler/training/broker/taskClock.js +41 -0
  260. package/dist/compiler/training/compiledAgent.d.ts +21 -0
  261. package/dist/compiler/training/compiledAgent.js +62 -0
  262. package/dist/compiler/training/container/contract.d.ts +54 -0
  263. package/dist/compiler/training/container/contract.js +51 -0
  264. package/dist/compiler/training/container/evaluators.d.ts +48 -0
  265. package/dist/compiler/training/container/evaluators.js +50 -0
  266. package/dist/compiler/training/container/grokWriteback.d.ts +8 -0
  267. package/dist/compiler/training/container/grokWriteback.js +26 -0
  268. package/dist/compiler/training/container/index.d.ts +5 -0
  269. package/dist/compiler/training/container/index.js +3 -0
  270. package/dist/compiler/training/container/launch.d.ts +21 -0
  271. package/dist/compiler/training/container/launch.js +264 -0
  272. package/dist/compiler/training/container/nativeSlots.d.ts +14 -0
  273. package/dist/compiler/training/container/nativeSlots.js +13 -0
  274. package/dist/compiler/training/container/outputCopy.d.ts +2 -0
  275. package/dist/compiler/training/container/outputCopy.js +72 -0
  276. package/dist/compiler/training/container/outputVolume.d.ts +27 -0
  277. package/dist/compiler/training/container/outputVolume.js +161 -0
  278. package/dist/compiler/training/container/prepare.d.ts +10 -0
  279. package/dist/compiler/training/container/prepare.js +125 -0
  280. package/dist/compiler/training/container/process.d.ts +14 -0
  281. package/dist/compiler/training/container/process.js +70 -0
  282. package/dist/compiler/training/container/security.d.ts +38 -0
  283. package/dist/compiler/training/container/security.js +68 -0
  284. package/dist/compiler/training/container/subjectIsolation.d.ts +5 -0
  285. package/dist/compiler/training/container/subjectIsolation.js +15 -0
  286. package/dist/compiler/training/context.d.ts +15 -0
  287. package/dist/compiler/training/context.js +93 -0
  288. package/dist/compiler/training/contract.d.ts +144 -0
  289. package/dist/compiler/training/contract.js +36 -0
  290. package/dist/compiler/training/execution.d.ts +417 -0
  291. package/dist/compiler/training/execution.js +160 -0
  292. package/dist/compiler/training/index.d.ts +12 -0
  293. package/dist/compiler/training/index.js +10 -0
  294. package/dist/compiler/training/moments.d.ts +80 -0
  295. package/dist/compiler/training/moments.js +118 -0
  296. package/dist/compiler/training/output.d.ts +2 -0
  297. package/dist/compiler/training/output.js +20 -0
  298. package/dist/compiler/training/plan/contract.d.ts +287 -0
  299. package/dist/compiler/training/plan/contract.js +49 -0
  300. package/dist/compiler/training/plan/index.d.ts +5 -0
  301. package/dist/compiler/training/plan/index.js +4 -0
  302. package/dist/compiler/training/plan/load.d.ts +9 -0
  303. package/dist/compiler/training/plan/load.js +153 -0
  304. package/dist/compiler/training/plan/references.d.ts +19 -0
  305. package/dist/compiler/training/plan/references.js +57 -0
  306. package/dist/compiler/training/plan/resolve.d.ts +4 -0
  307. package/dist/compiler/training/plan/resolve.js +73 -0
  308. package/dist/compiler/training/plan/targets.d.ts +11 -0
  309. package/dist/compiler/training/plan/targets.js +71 -0
  310. package/dist/compiler/training/plan/types.d.ts +36 -0
  311. package/dist/compiler/training/plan/types.js +1 -0
  312. package/dist/compiler/training/preparation/assets/Dockerfile +109 -0
  313. package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
  314. package/dist/compiler/training/preparation/broker.d.ts +21 -0
  315. package/dist/compiler/training/preparation/broker.js +45 -0
  316. package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
  317. package/dist/compiler/training/preparation/contextModes.js +38 -0
  318. package/dist/compiler/training/preparation/contract.d.ts +207 -0
  319. package/dist/compiler/training/preparation/contract.js +113 -0
  320. package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
  321. package/dist/compiler/training/preparation/copyAssets.js +8 -0
  322. package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
  323. package/dist/compiler/training/preparation/daimonParent.js +114 -0
  324. package/dist/compiler/training/preparation/files.d.ts +29 -0
  325. package/dist/compiler/training/preparation/files.js +146 -0
  326. package/dist/compiler/training/preparation/image.d.ts +28 -0
  327. package/dist/compiler/training/preparation/image.js +107 -0
  328. package/dist/compiler/training/preparation/index.d.ts +3 -0
  329. package/dist/compiler/training/preparation/index.js +2 -0
  330. package/dist/compiler/training/preparation/inputs.d.ts +24 -0
  331. package/dist/compiler/training/preparation/inputs.js +101 -0
  332. package/dist/compiler/training/preparation/prepare.d.ts +38 -0
  333. package/dist/compiler/training/preparation/prepare.js +223 -0
  334. package/dist/compiler/training/preparation/scratch.d.ts +8 -0
  335. package/dist/compiler/training/preparation/scratch.js +114 -0
  336. package/dist/compiler/training/repair/compatibility.d.ts +11 -0
  337. package/dist/compiler/training/repair/compatibility.js +34 -0
  338. package/dist/compiler/training/repair/contract.d.ts +840 -0
  339. package/dist/compiler/training/repair/contract.js +33 -0
  340. package/dist/compiler/training/repair/index.d.ts +3 -0
  341. package/dist/compiler/training/repair/index.js +3 -0
  342. package/dist/compiler/training/repair/prepare.d.ts +382 -0
  343. package/dist/compiler/training/repair/prepare.js +78 -0
  344. package/dist/compiler/training/repair/witness.d.ts +352 -0
  345. package/dist/compiler/training/repair/witness.js +48 -0
  346. package/dist/compiler/training/resolution.d.ts +25 -0
  347. package/dist/compiler/training/resolution.js +69 -0
  348. package/dist/compiler/training/rewind/contract.d.ts +321 -0
  349. package/dist/compiler/training/rewind/contract.js +39 -0
  350. package/dist/compiler/training/rewind/deployedResource.d.ts +22 -0
  351. package/dist/compiler/training/rewind/deployedResource.js +19 -0
  352. package/dist/compiler/training/rewind/feed.d.ts +12 -0
  353. package/dist/compiler/training/rewind/feed.js +182 -0
  354. package/dist/compiler/training/rewind/feedContent.d.ts +6 -0
  355. package/dist/compiler/training/rewind/feedContent.js +38 -0
  356. package/dist/compiler/training/rewind/git.d.ts +8 -0
  357. package/dist/compiler/training/rewind/git.js +159 -0
  358. package/dist/compiler/training/rewind/gitArchive.d.ts +2 -0
  359. package/dist/compiler/training/rewind/gitArchive.js +7 -0
  360. package/dist/compiler/training/rewind/gitHistory.d.ts +3 -0
  361. package/dist/compiler/training/rewind/gitHistory.js +55 -0
  362. package/dist/compiler/training/rewind/gitProcess.d.ts +19 -0
  363. package/dist/compiler/training/rewind/gitProcess.js +81 -0
  364. package/dist/compiler/training/rewind/gitTree.d.ts +14 -0
  365. package/dist/compiler/training/rewind/gitTree.js +90 -0
  366. package/dist/compiler/training/rewind/history.d.ts +28 -0
  367. package/dist/compiler/training/rewind/history.js +239 -0
  368. package/dist/compiler/training/rewind/index.d.ts +18 -0
  369. package/dist/compiler/training/rewind/index.js +15 -0
  370. package/dist/compiler/training/rewind/inputs.d.ts +9 -0
  371. package/dist/compiler/training/rewind/inputs.js +67 -0
  372. package/dist/compiler/training/rewind/instant.d.ts +4 -0
  373. package/dist/compiler/training/rewind/instant.js +24 -0
  374. package/dist/compiler/training/rewind/leakCheck.d.ts +10 -0
  375. package/dist/compiler/training/rewind/leakCheck.js +56 -0
  376. package/dist/compiler/training/rewind/leakFeed.d.ts +5 -0
  377. package/dist/compiler/training/rewind/leakFeed.js +25 -0
  378. package/dist/compiler/training/rewind/leakFiles.d.ts +10 -0
  379. package/dist/compiler/training/rewind/leakFiles.js +106 -0
  380. package/dist/compiler/training/rewind/leakGit.d.ts +3 -0
  381. package/dist/compiler/training/rewind/leakGit.js +78 -0
  382. package/dist/compiler/training/rewind/leakGitPayload.d.ts +4 -0
  383. package/dist/compiler/training/rewind/leakGitPayload.js +57 -0
  384. package/dist/compiler/training/rewind/leakInputs.d.ts +7 -0
  385. package/dist/compiler/training/rewind/leakInputs.js +135 -0
  386. package/dist/compiler/training/rewind/leakLayout.d.ts +2 -0
  387. package/dist/compiler/training/rewind/leakLayout.js +17 -0
  388. package/dist/compiler/training/rewind/leakProvenance.d.ts +3 -0
  389. package/dist/compiler/training/rewind/leakProvenance.js +88 -0
  390. package/dist/compiler/training/rewind/materialize.d.ts +136 -0
  391. package/dist/compiler/training/rewind/materialize.js +212 -0
  392. package/dist/compiler/training/rewind/memory.d.ts +10 -0
  393. package/dist/compiler/training/rewind/memory.js +84 -0
  394. package/dist/compiler/training/rewind/memorySchemas.d.ts +87 -0
  395. package/dist/compiler/training/rewind/memorySchemas.js +50 -0
  396. package/dist/compiler/training/rewind/moltnet.d.ts +2 -0
  397. package/dist/compiler/training/rewind/moltnet.js +54 -0
  398. package/dist/compiler/training/rewind/moltnetJson.d.ts +13 -0
  399. package/dist/compiler/training/rewind/moltnetJson.js +180 -0
  400. package/dist/compiler/training/rewind/moltnetSchemas.d.ts +1226 -0
  401. package/dist/compiler/training/rewind/moltnetSchemas.js +75 -0
  402. package/dist/compiler/training/rewind/moltnetSqlite.d.ts +31 -0
  403. package/dist/compiler/training/rewind/moltnetSqlite.js +192 -0
  404. package/dist/compiler/training/rewind/moltnetSqliteData.d.ts +10 -0
  405. package/dist/compiler/training/rewind/moltnetSqliteData.js +113 -0
  406. package/dist/compiler/training/rewind/recordInput.d.ts +40 -0
  407. package/dist/compiler/training/rewind/recordInput.js +49 -0
  408. package/dist/compiler/training/rewind/recordedBundle.d.ts +4 -0
  409. package/dist/compiler/training/rewind/recordedBundle.js +58 -0
  410. package/dist/compiler/training/rewind/recordedCommit.d.ts +2 -0
  411. package/dist/compiler/training/rewind/recordedCommit.js +10 -0
  412. package/dist/compiler/training/rewind/select.d.ts +18 -0
  413. package/dist/compiler/training/rewind/select.js +64 -0
  414. package/dist/compiler/training/rewind/snapshotManifest.d.ts +42 -0
  415. package/dist/compiler/training/rewind/snapshotManifest.js +134 -0
  416. package/dist/compiler/training/rewind/taskClock.d.ts +12 -0
  417. package/dist/compiler/training/rewind/taskClock.js +40 -0
  418. package/dist/compiler/training/rewind/timestamps.d.ts +4 -0
  419. package/dist/compiler/training/rewind/timestamps.js +26 -0
  420. package/dist/compiler/training/rewind/types.d.ts +43 -0
  421. package/dist/compiler/training/rewind/types.js +1 -0
  422. package/dist/compiler/training/rewind/volumes.d.ts +12 -0
  423. package/dist/compiler/training/rewind/volumes.js +58 -0
  424. package/dist/compiler/training/selection.d.ts +7 -0
  425. package/dist/compiler/training/selection.js +15 -0
  426. package/dist/compiler/types.d.ts +7 -2
  427. package/dist/compiler/upProject.d.ts +27 -1
  428. package/dist/compiler/upProject.js +135 -180
  429. package/dist/compiler/upProjectHandoff.d.ts +62 -0
  430. package/dist/compiler/upProjectHandoff.js +204 -0
  431. package/dist/compiler/upReceipt.js +49 -4
  432. package/dist/compiler/updateProjectModels.js +1 -0
  433. package/dist/compiler/view/types.d.ts +1 -1
  434. package/dist/compiler/workspaceBundleArtifacts.d.ts +18 -0
  435. package/dist/compiler/workspaceBundleArtifacts.js +155 -0
  436. package/dist/compiler/workspaceBundleCache.d.ts +23 -0
  437. package/dist/compiler/workspaceBundleCache.js +79 -0
  438. package/dist/compiler/workspaceBundleDependencies.d.ts +21 -0
  439. package/dist/compiler/workspaceBundleDependencies.js +122 -0
  440. package/dist/compiler/workspaceBundleFiles.d.ts +51 -0
  441. package/dist/compiler/workspaceBundleFiles.js +251 -0
  442. package/dist/compiler/workspaceBundleGenerated.d.ts +25 -0
  443. package/dist/compiler/workspaceBundleGenerated.js +103 -0
  444. package/dist/compiler/workspaceBundleGit.d.ts +64 -0
  445. package/dist/compiler/workspaceBundleGit.js +154 -0
  446. package/dist/compiler/workspaceBundleKey.d.ts +34 -0
  447. package/dist/compiler/workspaceBundleKey.js +17 -0
  448. package/dist/compiler/workspaceBundleResolve.d.ts +56 -0
  449. package/dist/compiler/workspaceBundleResolve.js +144 -0
  450. package/dist/compiler/workspaceBundleRun.d.ts +41 -0
  451. package/dist/compiler/workspaceBundleRun.js +79 -0
  452. package/dist/compiler/workspaceBundleTar.d.ts +47 -0
  453. package/dist/compiler/workspaceBundleTar.js +140 -0
  454. package/dist/compiler/workspaceBundleTree.d.ts +15 -0
  455. package/dist/compiler/workspaceBundleTree.js +58 -0
  456. package/dist/compiler/workspaceGitFetch.d.ts +41 -0
  457. package/dist/compiler/workspaceGitFetch.js +155 -0
  458. package/dist/compiler/workspaceGitPins.d.ts +33 -0
  459. package/dist/compiler/workspaceGitPins.js +127 -0
  460. package/dist/compiler/workspaceResources.d.ts +9 -2
  461. package/dist/compiler/workspaceResources.js +39 -7
  462. package/dist/deployment/activation.d.ts +3 -0
  463. package/dist/deployment/activation.js +12 -0
  464. package/dist/deployment/artifactsExportPlan.js +51 -1
  465. package/dist/deployment/canaryCutover.d.ts +42 -0
  466. package/dist/deployment/canaryCutover.js +140 -0
  467. package/dist/deployment/candidateDiagnostics.d.ts +15 -0
  468. package/dist/deployment/candidateDiagnostics.js +90 -0
  469. package/dist/deployment/candidateRecording.d.ts +8 -0
  470. package/dist/deployment/candidateRecording.js +22 -0
  471. package/dist/deployment/dockerLogs.js +4 -1
  472. package/dist/deployment/dockerManager.d.ts +5 -3
  473. package/dist/deployment/dockerManager.js +21 -5
  474. package/dist/deployment/dockerProbeGateway.d.ts +17 -0
  475. package/dist/deployment/dockerProbeGateway.js +17 -2
  476. package/dist/deployment/downDeployment.d.ts +7 -0
  477. package/dist/deployment/downDeployment.js +114 -9
  478. package/dist/deployment/downReceiptTypes.d.ts +17 -2
  479. package/dist/deployment/downReceiptTypes.js +17 -2
  480. package/dist/deployment/homeStore.d.ts +9 -1
  481. package/dist/deployment/homeStore.js +16 -53
  482. package/dist/deployment/index.d.ts +10 -0
  483. package/dist/deployment/index.js +10 -0
  484. package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
  485. package/dist/deployment/lifecycleCompletionContracts.js +34 -0
  486. package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
  487. package/dist/deployment/lifecycleCompletionPaths.js +3 -0
  488. package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
  489. package/dist/deployment/lifecycleCompletionPublication.js +18 -4
  490. package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
  491. package/dist/deployment/lifecycleCompletionStore.js +7 -7
  492. package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
  493. package/dist/deployment/lifecycleUpRecords.js +127 -0
  494. package/dist/deployment/native/AGENTS.md +11 -0
  495. package/dist/deployment/native/rename-noreplace-arm64 +0 -0
  496. package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
  497. package/dist/deployment/native/rename-noreplace-x64 +0 -0
  498. package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
  499. package/dist/deployment/noReplaceActivation.d.ts +17 -0
  500. package/dist/deployment/noReplaceActivation.js +50 -0
  501. package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
  502. package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
  503. package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
  504. package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
  505. package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
  506. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
  507. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
  508. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
  509. package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
  510. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
  511. package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
  512. package/dist/deployment/organizationReady.d.ts +2 -0
  513. package/dist/deployment/organizationReady.js +36 -4
  514. package/dist/deployment/pidLock.d.ts +25 -0
  515. package/dist/deployment/pidLock.js +81 -0
  516. package/dist/deployment/productStateClone.d.ts +43 -0
  517. package/dist/deployment/productStateClone.js +319 -0
  518. package/dist/deployment/record.d.ts +85 -1
  519. package/dist/deployment/record.js +11 -5
  520. package/dist/deployment/recordPublication.d.ts +15 -0
  521. package/dist/deployment/recordPublication.js +76 -0
  522. package/dist/deployment/recordedMemoryRetention.d.ts +18 -0
  523. package/dist/deployment/recordedMemoryRetention.js +27 -0
  524. package/dist/deployment/resourceLog.d.ts +140 -0
  525. package/dist/deployment/resourceLog.js +78 -0
  526. package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
  527. package/dist/deployment/upLifecycleRecoveryState.js +12 -0
  528. package/dist/deployment/upReceiptTypes.d.ts +32 -6
  529. package/dist/deployment/upReceiptTypes.js +29 -2
  530. package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
  531. package/dist/deployment/workspaceResourceMigration.js +315 -0
  532. package/dist/dev/project.d.ts +7 -0
  533. package/dist/dev/project.js +9 -0
  534. package/dist/distribution/buildDistributionReport.d.ts +3 -0
  535. package/dist/distribution/buildDistributionReport.js +5 -0
  536. package/dist/distribution/consumeImage.d.ts +5 -0
  537. package/dist/distribution/consumeImage.js +115 -98
  538. package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
  539. package/dist/distribution/consumeImageDaimonDocker.js +45 -0
  540. package/dist/distribution/consumeImageLifecycle.d.ts +20 -0
  541. package/dist/distribution/consumeImageLifecycle.js +242 -0
  542. package/dist/distribution/consumeImageSupport.d.ts +19 -0
  543. package/dist/distribution/consumeImageSupport.js +40 -0
  544. package/dist/distribution/distributionReportSchema.d.ts +58 -1
  545. package/dist/distribution/distributionReportSchema.js +35 -2
  546. package/dist/distribution/dockerRunner.d.ts +6 -1
  547. package/dist/distribution/dockerRunner.js +31 -4
  548. package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
  549. package/dist/distribution/imageRuntimeAuth.js +70 -1
  550. package/dist/distribution/index.d.ts +1 -1
  551. package/dist/distribution/index.js +1 -1
  552. package/dist/distribution/preflight.js +5 -1
  553. package/dist/distribution/renderImageInterface.js +1 -1
  554. package/dist/distribution/types.d.ts +29 -1
  555. package/dist/distribution/types.js +3 -0
  556. package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
  557. package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
  558. package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
  559. package/dist/evidenceExportHelper/index.d.ts +4 -0
  560. package/dist/evidenceExportHelper/index.js +4 -0
  561. package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
  562. package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
  563. package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
  564. package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
  565. package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
  566. package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
  567. package/dist/evidenceExportHelper/recipe.d.ts +7 -0
  568. package/dist/evidenceExportHelper/recipe.js +83 -0
  569. package/dist/filesystem/durableWrite.d.ts +10 -0
  570. package/dist/filesystem/durableWrite.js +87 -0
  571. package/dist/filesystem/index.d.ts +2 -0
  572. package/dist/filesystem/index.js +2 -0
  573. package/dist/filesystem/io.d.ts +2 -0
  574. package/dist/filesystem/io.js +16 -1
  575. package/dist/filesystem/retainedJsonl.d.ts +23 -0
  576. package/dist/filesystem/retainedJsonl.js +123 -0
  577. package/dist/manifest/commandSchemas.d.ts +5 -0
  578. package/dist/manifest/commandSchemas.js +5 -0
  579. package/dist/manifest/executionSchemas.d.ts +47 -0
  580. package/dist/manifest/executionSchemas.js +31 -2
  581. package/dist/manifest/index.d.ts +2 -0
  582. package/dist/manifest/index.js +2 -0
  583. package/dist/manifest/loadManifest.js +3 -26
  584. package/dist/manifest/mcpSchemas.d.ts +62 -0
  585. package/dist/manifest/mcpSchemas.js +57 -8
  586. package/dist/manifest/memorySchemas.d.ts +1 -1
  587. package/dist/manifest/memorySchemas.js +1 -1
  588. package/dist/manifest/parseManifest.d.ts +7 -0
  589. package/dist/manifest/parseManifest.js +65 -0
  590. package/dist/manifest/renderSpawnfile.js +4 -1
  591. package/dist/manifest/renderSpawnfileNetworks.js +11 -0
  592. package/dist/manifest/renderSpawnfileWorkspace.js +10 -1
  593. package/dist/manifest/scheduleSchemas.d.ts +3 -1
  594. package/dist/manifest/scheduleSchemas.js +91 -5
  595. package/dist/manifest/schemas.d.ts +1419 -120
  596. package/dist/manifest/schemas.js +19 -6
  597. package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
  598. package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
  599. package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
  600. package/dist/manifest/teamNetworkSchemas.d.ts +18 -4
  601. package/dist/manifest/teamNetworkSchemas.js +19 -1
  602. package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
  603. package/dist/manifest/teamNetworkServerSchemas.js +18 -2
  604. package/dist/manifest/trainingDataSchemas.d.ts +357 -0
  605. package/dist/manifest/trainingDataSchemas.js +31 -0
  606. package/dist/manifest/trainingSchemas.d.ts +49 -0
  607. package/dist/manifest/trainingSchemas.js +44 -0
  608. package/dist/manifest/volumeFeedSchemas.d.ts +52 -0
  609. package/dist/manifest/volumeFeedSchemas.js +104 -0
  610. package/dist/manifest/workspaceSchemas.d.ts +194 -1
  611. package/dist/manifest/workspaceSchemas.js +117 -2
  612. package/dist/recording/compose.d.ts +3 -0
  613. package/dist/recording/compose.js +93 -0
  614. package/dist/recording/deployment.d.ts +15 -0
  615. package/dist/recording/deployment.js +38 -0
  616. package/dist/recording/history.d.ts +16 -0
  617. package/dist/recording/history.js +47 -0
  618. package/dist/recording/index.d.ts +9 -0
  619. package/dist/recording/index.js +9 -0
  620. package/dist/recording/moment.d.ts +61 -0
  621. package/dist/recording/moment.js +36 -0
  622. package/dist/recording/parse.d.ts +15 -0
  623. package/dist/recording/parse.js +74 -0
  624. package/dist/recording/read.d.ts +8 -0
  625. package/dist/recording/read.js +61 -0
  626. package/dist/recording/store.d.ts +10 -0
  627. package/dist/recording/store.js +94 -0
  628. package/dist/recording/sync.d.ts +24 -0
  629. package/dist/recording/sync.js +126 -0
  630. package/dist/recording/types.d.ts +45 -0
  631. package/dist/recording/types.js +2 -0
  632. package/dist/release/drainControl.d.ts +54 -0
  633. package/dist/release/drainControl.js +137 -0
  634. package/dist/release/drainPhase.d.ts +37 -0
  635. package/dist/release/drainPhase.js +161 -0
  636. package/dist/release/index.d.ts +11 -0
  637. package/dist/release/index.js +11 -0
  638. package/dist/release/ledger.d.ts +75 -0
  639. package/dist/release/ledger.js +111 -0
  640. package/dist/release/notify.d.ts +58 -0
  641. package/dist/release/notify.js +126 -0
  642. package/dist/release/pending.d.ts +35 -0
  643. package/dist/release/pending.js +60 -0
  644. package/dist/release/postDeploy.d.ts +32 -0
  645. package/dist/release/postDeploy.js +62 -0
  646. package/dist/release/releaseDefaults.d.ts +9 -0
  647. package/dist/release/releaseDefaults.js +115 -0
  648. package/dist/release/releaseDocker.d.ts +38 -0
  649. package/dist/release/releaseDocker.js +94 -0
  650. package/dist/release/releaseTypes.d.ts +94 -0
  651. package/dist/release/releaseTypes.js +1 -0
  652. package/dist/release/runRelease.d.ts +9 -0
  653. package/dist/release/runRelease.js +218 -0
  654. package/dist/release/swap.d.ts +23 -0
  655. package/dist/release/swap.js +55 -0
  656. package/dist/release/types.d.ts +50 -0
  657. package/dist/release/types.js +29 -0
  658. package/dist/report/index.d.ts +1 -0
  659. package/dist/report/index.js +1 -0
  660. package/dist/report/recording.d.ts +57 -0
  661. package/dist/report/recording.js +26 -0
  662. package/dist/report/types.d.ts +92 -4
  663. package/dist/runtime/common.d.ts +28 -1
  664. package/dist/runtime/common.js +33 -3
  665. package/dist/runtime/container.js +46 -35
  666. package/dist/runtime/daimon/adapter.d.ts +14 -0
  667. package/dist/runtime/daimon/adapter.js +254 -0
  668. package/dist/runtime/daimon/attention.d.ts +8 -0
  669. package/dist/runtime/daimon/attention.js +32 -0
  670. package/dist/runtime/daimon/config.d.ts +29 -0
  671. package/dist/runtime/daimon/config.js +321 -0
  672. package/dist/runtime/daimon/contract-manifest.json +1 -0
  673. package/dist/runtime/daimon/contract-manifest.sha256 +1 -0
  674. package/dist/runtime/daimon/contractManifest.d.ts +346 -0
  675. package/dist/runtime/daimon/contractManifest.js +335 -0
  676. package/dist/runtime/daimon/grokModel.d.ts +19 -0
  677. package/dist/runtime/daimon/grokModel.js +33 -0
  678. package/dist/runtime/daimon/grokTurnLimits.d.ts +25 -0
  679. package/dist/runtime/daimon/grokTurnLimits.js +51 -0
  680. package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +43 -0
  681. package/dist/runtime/daimon/grokWorkerConfigBytes.js +53 -0
  682. package/dist/runtime/daimon/grokWorkerContract.d.ts +27 -0
  683. package/dist/runtime/daimon/grokWorkerContract.js +60 -0
  684. package/dist/runtime/daimon/memory.d.ts +57 -0
  685. package/dist/runtime/daimon/memory.js +125 -0
  686. package/dist/runtime/daimon/recording.d.ts +19 -0
  687. package/dist/runtime/daimon/recording.js +50 -0
  688. package/dist/runtime/daimon/runAuth.d.ts +51 -0
  689. package/dist/runtime/daimon/runAuth.js +279 -0
  690. package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
  691. package/dist/runtime/daimon/runtimeIdentity.js +22 -0
  692. package/dist/runtime/daimon/scheduleAuthority.d.ts +11 -0
  693. package/dist/runtime/daimon/scheduleAuthority.js +31 -0
  694. package/dist/runtime/daimon/wakeMoments.d.ts +15 -0
  695. package/dist/runtime/daimon/wakeMoments.js +17 -0
  696. package/dist/runtime/daimonInstall.d.ts +3 -0
  697. package/dist/runtime/daimonInstall.js +25 -0
  698. package/dist/runtime/index.d.ts +5 -0
  699. package/dist/runtime/index.js +5 -0
  700. package/dist/runtime/install.d.ts +5 -0
  701. package/dist/runtime/install.js +4 -0
  702. package/dist/runtime/localDaimonAuthority.d.ts +11 -0
  703. package/dist/runtime/localDaimonAuthority.js +77 -0
  704. package/dist/runtime/mnemeMcp.d.ts +13 -0
  705. package/dist/runtime/mnemeMcp.js +26 -0
  706. package/dist/runtime/openclaw/adapter.js +5 -2
  707. package/dist/runtime/pi/adapter.d.ts +0 -1
  708. package/dist/runtime/pi/adapter.js +5 -6
  709. package/dist/runtime/pi/appCliSource.js +1 -1
  710. package/dist/runtime/pi/appScheduleSource.js +6 -2
  711. package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
  712. package/dist/runtime/pi/containerTargets.js +6 -0
  713. package/dist/runtime/picoclaw/adapter.js +5 -2
  714. package/dist/runtime/registry.d.ts +6 -0
  715. package/dist/runtime/registry.js +32 -3
  716. package/dist/runtime/scheduleUtils.d.ts +1 -0
  717. package/dist/runtime/scheduleUtils.js +5 -1
  718. package/dist/runtime/types.d.ts +40 -0
  719. package/dist/runtime/usageLedger.d.ts +158 -0
  720. package/dist/runtime/usageLedger.js +269 -0
  721. package/dist/runtime/usageLedgerRead.d.ts +54 -0
  722. package/dist/runtime/usageLedgerRead.js +102 -0
  723. package/dist/runtime/usageRequestLedger.d.ts +42 -0
  724. package/dist/runtime/usageRequestLedger.js +72 -0
  725. package/dist/shared/daimonCodexDocker.d.ts +32 -0
  726. package/dist/shared/daimonCodexDocker.js +120 -0
  727. package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
  728. package/dist/shared/daimonGrokSeccompProfile.js +11 -0
  729. package/dist/shared/index.d.ts +3 -0
  730. package/dist/shared/index.js +3 -0
  731. package/dist/shared/recording.d.ts +8 -0
  732. package/dist/shared/recording.js +25 -0
  733. package/dist/shared/types.d.ts +1 -1
  734. package/dist/shared/volumeNames.d.ts +6 -0
  735. package/dist/shared/volumeNames.js +14 -0
  736. package/dist/target/dockerArtifactsProvider.js +34 -7
  737. package/dist/target/dockerBaseImage.d.ts +2 -0
  738. package/dist/target/dockerBaseImage.js +11 -0
  739. package/dist/target/dockerCommandExecutor.d.ts +11 -0
  740. package/dist/target/dockerCommandExecutor.js +53 -2
  741. package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
  742. package/dist/target/dockerCommandExecutorCore.js +5 -3
  743. package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
  744. package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
  745. package/dist/target/dockerTarget.d.ts +1 -0
  746. package/dist/target/dockerTargetBinding.d.ts +1 -2
  747. package/dist/target/dockerTargetBinding.js +4 -4
  748. package/dist/target/dockerTargetExecFile.d.ts +19 -0
  749. package/dist/target/dockerTargetExecFile.js +194 -0
  750. package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
  751. package/dist/target/dockerWorldServiceProvider.js +13 -1
  752. package/dist/target/evidenceExport.d.ts +3 -1
  753. package/dist/target/evidenceExport.js +12 -3
  754. package/dist/target/evidenceExportOperationsTestKit.js +3 -3
  755. package/dist/target/evidenceExportProvider.d.ts +2 -0
  756. package/dist/target/evidenceExportProvider.js +15 -5
  757. package/dist/target/publicArtifactSnapshot.d.ts +31 -0
  758. package/dist/target/publicArtifactSnapshot.js +37 -3
  759. package/dist/volume/feedLand.d.ts +31 -0
  760. package/dist/volume/feedLand.js +174 -0
  761. package/dist/volume/feedLandings.d.ts +45 -0
  762. package/dist/volume/feedLandings.js +111 -0
  763. package/dist/volume/feedLayout.d.ts +61 -0
  764. package/dist/volume/feedLayout.js +234 -0
  765. package/dist/volume/feedLock.d.ts +7 -0
  766. package/dist/volume/feedLock.js +131 -0
  767. package/dist/volume/feedManifest.d.ts +27 -0
  768. package/dist/volume/feedManifest.js +123 -0
  769. package/dist/volume/feedPrepare.d.ts +16 -0
  770. package/dist/volume/feedPrepare.js +228 -0
  771. package/dist/volume/feedProject.d.ts +39 -0
  772. package/dist/volume/feedProject.js +92 -0
  773. package/dist/volume/feedRecord.d.ts +55 -0
  774. package/dist/volume/feedRecord.js +148 -0
  775. package/dist/volume/feedRef.d.ts +43 -0
  776. package/dist/volume/feedRef.js +117 -0
  777. package/dist/volume/feedRefresh.d.ts +15 -0
  778. package/dist/volume/feedRefresh.js +187 -0
  779. package/dist/volume/feedSource.d.ts +66 -0
  780. package/dist/volume/feedSource.js +104 -0
  781. package/dist/volume/feedTarget.d.ts +70 -0
  782. package/dist/volume/feedTarget.js +9 -0
  783. package/dist/volume/feedTestKit.d.ts +11 -0
  784. package/dist/volume/feedTestKit.js +45 -0
  785. package/dist/volume/feedVerify.d.ts +18 -0
  786. package/dist/volume/feedVerify.js +104 -0
  787. package/dist/volume/index.d.ts +13 -0
  788. package/dist/volume/index.js +13 -0
  789. package/examples/README.md +45 -0
  790. package/examples/agent-with-subagents/AGENTS.md +3 -0
  791. package/examples/agent-with-subagents/Spawnfile +30 -0
  792. package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
  793. package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
  794. package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
  795. package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
  796. package/examples/daimon-org/Spawnfile +68 -0
  797. package/examples/daimon-org/TEAM.md +4 -0
  798. package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
  799. package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
  800. package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
  801. package/examples/daimon-org/teams/review/Spawnfile +53 -0
  802. package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
  803. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
  804. package/examples/daimon-public-host/AGENTS.md +3 -0
  805. package/examples/daimon-public-host/Spawnfile +21 -0
  806. package/examples/distribution-org/Spawnfile +43 -0
  807. package/examples/distribution-org/TEAM.md +4 -0
  808. package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
  809. package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
  810. package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
  811. package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
  812. package/examples/jungian-daimon-org/Spawnfile +41 -0
  813. package/examples/jungian-daimon-org/TEAM.md +21 -0
  814. package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
  815. package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
  816. package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
  817. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
  818. package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
  819. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
  820. package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
  821. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
  822. package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
  823. package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
  824. package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
  825. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
  826. package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
  827. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
  828. package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
  829. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
  830. package/examples/mixed-runtime-org/Spawnfile +71 -0
  831. package/examples/mixed-runtime-org/TEAM.md +8 -0
  832. package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
  833. package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
  834. package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
  835. package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
  836. package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
  837. package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
  838. package/examples/moltnet-team-chat/Spawnfile +43 -0
  839. package/examples/moltnet-team-chat/TEAM.md +5 -0
  840. package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
  841. package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
  842. package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
  843. package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
  844. package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
  845. package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
  846. package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
  847. package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
  848. package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
  849. package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
  850. package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
  851. package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
  852. package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
  853. package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
  854. package/examples/single-agent/AGENTS.md +3 -0
  855. package/examples/single-agent/HEARTBEAT.md +3 -0
  856. package/examples/single-agent/IDENTITY.md +3 -0
  857. package/examples/single-agent/MEMORY.md +3 -0
  858. package/examples/single-agent/SOUL.md +3 -0
  859. package/examples/single-agent/Spawnfile +41 -0
  860. package/examples/single-agent/skills/web_search/SKILL.md +6 -0
  861. package/moltnet-releases.json +5 -4
  862. package/package.json +36 -9
  863. package/runtimes.yaml +8 -3
  864. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
  865. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
  866. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
  867. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
  868. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
  869. package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
  870. package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
  871. package/dist/ownership/simfileRunOperatorInputs.js +0 -139
  872. package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
  873. package/dist/target/cleanupRunDocker.test-helper.js +0 -238
@@ -1,5 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { fileExists, readUtf8File } from "../filesystem/index.js";
3
+ import { derivePersistentMountVolumeName, parseDistributionReport } from "../distribution/index.js";
3
4
  import { REPORT_FILENAME, SpawnfileError } from "../shared/index.js";
4
5
  import { exportRunArtifacts } from "./artifactsExport.js";
5
6
  import { assertDeploymentLifecycleCorrelation, } from "./deploymentLifecycleCorrelation.js";
@@ -7,6 +8,104 @@ import { defaultDockerTeardownExecFile, removeDockerContainer, removeDockerVolum
7
8
  import { DOWN_RECEIPT_VERSION } from "./downReceiptTypes.js";
8
9
  import { initializeOrganizationHandoffAuthorityStore, } from "./organizationHandoffAuthorityStore.js";
9
10
  import { readDeploymentRecordFromOutput } from "./record.js";
11
+ import { assertRecordedMemoryRetention, recordedMemoryForDeletion } from "./recordedMemoryRetention.js";
12
+ import { readHomeDeploymentRecord, readHomeDeploymentReport, resolveHomeRecordPath } from "./homeStore.js";
13
+ import { resolveDeploymentRecordPath } from "./names.js";
14
+ import { dockerContextNameForTarget } from "./target.js";
15
+ export const readCanonicalDownRecord = async (compiledOutputDirectory, deploymentName) => {
16
+ const projectPath = resolveDeploymentRecordPath(path.resolve(compiledOutputDirectory), deploymentName);
17
+ const homePath = resolveHomeRecordPath(deploymentName);
18
+ const [projectExists, homeExists] = await Promise.all([fileExists(projectPath), fileExists(homePath)]);
19
+ if (projectExists && homeExists)
20
+ throw new SpawnfileError("runtime_error", "Deployment record is ambiguous between project and image stores");
21
+ if (projectExists) {
22
+ const record = await readDeploymentRecordFromOutput(path.resolve(compiledOutputDirectory), deploymentName);
23
+ if (record.source.kind !== "project")
24
+ throw new SpawnfileError("runtime_error", "Project deployment store contains a non-project record");
25
+ return { mode: "project", record };
26
+ }
27
+ if (homeExists) {
28
+ const record = await readHomeDeploymentRecord(deploymentName);
29
+ if (record.source.kind !== "image")
30
+ throw new SpawnfileError("runtime_error", "Image deployment store contains a non-image record");
31
+ return { mode: "image", record };
32
+ }
33
+ throw new SpawnfileError("validation_error", `No recorded deployment named ${deploymentName}`);
34
+ };
35
+ const imageDown = async (record, options, runner) => {
36
+ if (record.source.kind !== "image" || record.units.length !== 1)
37
+ throw new SpawnfileError("runtime_error", "Image deployment record is invalid for teardown");
38
+ if (!record.export_index && !options.force)
39
+ throw new SpawnfileError("runtime_error", "Image deployment artifact export is unsupported; pass --force to discard unexported artifacts");
40
+ const unit = record.units[0];
41
+ if (!unit.container_id || !unit.image_id)
42
+ throw new SpawnfileError("runtime_error", "Image deployment has no exact recorded container or image identity");
43
+ const context = dockerContextNameForTarget(record.target);
44
+ const prefix = context ? ["--context", context] : record.target.kind === "host" ? ["--host", record.target.value] : [];
45
+ const inspected = await runner.execFile(runner.dockerCommand, [...prefix, "container", "inspect", "--format", "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}", unit.container_id], { timeout: runner.timeoutMs });
46
+ let identity;
47
+ try {
48
+ const [idLine, nameLine, imageLine, labelsLine, ...extra] = inspected.stdout.trim().split("\n");
49
+ if (!idLine || !nameLine || !imageLine || !labelsLine || extra.length)
50
+ throw new Error();
51
+ identity = { id: JSON.parse(idLine), imageId: JSON.parse(imageLine), name: JSON.parse(nameLine), labels: JSON.parse(labelsLine) };
52
+ }
53
+ catch {
54
+ throw new SpawnfileError("runtime_error", "Image deployment container identity is malformed");
55
+ }
56
+ if (identity.id !== unit.container_id || identity.name !== `/${unit.container_name}` || identity.imageId !== unit.image_id
57
+ || identity.labels["com.spawnfile.deployment"] !== record.name
58
+ || identity.labels["com.spawnfile.compile_fingerprint"] !== record.compile_fingerprint
59
+ || identity.labels["com.spawnfile.unit"] !== unit.id) {
60
+ throw new SpawnfileError("runtime_error", "Image deployment container identity does not match its record");
61
+ }
62
+ let reportValue;
63
+ try {
64
+ reportValue = JSON.parse(await readHomeDeploymentReport(record.name));
65
+ }
66
+ catch (error) {
67
+ const reason = error instanceof Error ? error.message : String(error);
68
+ throw new SpawnfileError("runtime_error", `Cached image distribution report is unreadable: ${reason}`);
69
+ }
70
+ const report = parseDistributionReport(reportValue, "cached image distribution report");
71
+ if (report.compile_fingerprint !== record.compile_fingerprint)
72
+ throw new SpawnfileError("runtime_error", "Cached image distribution report does not match its deployment record");
73
+ const { owned, skipped } = partitionDeclaredVolumes(report.persistent_mounts, (mount) => derivePersistentMountVolumeName(record.name, mount));
74
+ assertRecordedMemoryRetention(recordedMemoryForDeletion(record, report, report.persistent_mounts, options), report.persistent_mounts, owned, (mount) => derivePersistentMountVolumeName(record.name, mount), options);
75
+ const volumes = [...owned, ...skipped].sort();
76
+ const removed = await removeDockerContainer(record.target, unit.container_id, runner);
77
+ if (!removed.removed)
78
+ return { deployment: record.name, errors: [`unable to remove container ${unit.container_id} (unit ${unit.id}): ${removed.error}`], retained_volumes: volumes, units_stopped: [], version: DOWN_RECEIPT_VERSION, ...(skipped.length > 0 ? { skipped_volumes: skipped } : {}) };
79
+ const errors = [], retained = [...skipped];
80
+ if (options.removeVolumes)
81
+ for (const volume of owned) {
82
+ const result = await removeDockerVolume(record.target, volume, runner);
83
+ if (!result.removed) {
84
+ errors.push(`unable to remove volume ${volume}: ${result.error}`);
85
+ retained.push(volume);
86
+ }
87
+ }
88
+ else
89
+ retained.push(...owned);
90
+ return { deployment: record.name, errors, retained_volumes: retained.sort(), units_stopped: [unit.id], version: DOWN_RECEIPT_VERSION, ...(skipped.length > 0 ? { skipped_volumes: skipped } : {}) };
91
+ };
92
+ /**
93
+ * Splits the volumes a `--volumes` teardown found into the ones this deployment
94
+ * owns and the author-declared ones it shares with every other deployment of the
95
+ * project. See downReceiptTypes.ts for why the declared ones are never removed.
96
+ */
97
+ const partitionDeclaredVolumes = (mounts, volumeNameOf) => {
98
+ const skipped = new Set();
99
+ const owned = new Set();
100
+ for (const mount of mounts) {
101
+ (mount.declared_volume_name?.trim() ? skipped : owned).add(volumeNameOf(mount));
102
+ }
103
+ // A name claimed by both is shared state, and the compiler already rejects that
104
+ // collision; fail safe here regardless by never removing it.
105
+ for (const name of skipped)
106
+ owned.delete(name);
107
+ return { owned: [...owned].sort(), skipped: [...skipped].sort() };
108
+ };
10
109
  const targetRefForUnit = (unit) => unit.container_id ?? unit.container_name;
11
110
  const readCompileReport = async (compiledOutputDirectory) => {
12
111
  const reportPath = path.join(compiledOutputDirectory, REPORT_FILENAME);
@@ -95,15 +194,22 @@ export const downDeployment = async (options) => {
95
194
  const dockerCommand = options.dockerCommand ?? "docker";
96
195
  const execFileImpl = options.execFile ?? defaultDockerTeardownExecFile;
97
196
  const timeoutMs = options.timeoutMs ?? 30_000;
98
- const initialRecord = await readDeploymentRecordFromOutput(compiledOutputDirectory, options.deploymentName);
197
+ const resolved = await readCanonicalDownRecord(compiledOutputDirectory, options.deploymentName);
198
+ const initialRecord = resolved.record;
99
199
  assertDeploymentLifecycleCorrelation(initialRecord, options.expectedLifecycleCorrelation);
200
+ const runnerOptions = { dockerCommand, execFile: execFileImpl, timeoutMs };
201
+ if (resolved.mode === "image")
202
+ return imageDown(initialRecord, options, runnerOptions);
203
+ const report = await readCompileReport(compiledOutputDirectory);
204
+ const mounts = report?.container?.persistent_mounts ?? [];
205
+ const { owned, skipped } = partitionDeclaredVolumes(mounts, (mount) => mount.volume_name);
206
+ assertRecordedMemoryRetention(recordedMemoryForDeletion(initialRecord, report, mounts, options), mounts, owned, (mount) => mount.volume_name, options);
100
207
  const record = await ensureExported(initialRecord, {
101
208
  ...options,
102
209
  compiledOutputDirectory,
103
210
  });
104
211
  assertDeploymentLifecycleCorrelation(record, options.expectedLifecycleCorrelation);
105
212
  await closeOrganizationHandoff(record);
106
- const runnerOptions = { dockerCommand, execFile: execFileImpl, timeoutMs };
107
213
  const unitsStopped = [];
108
214
  const errors = [];
109
215
  for (const unit of record.units) {
@@ -120,13 +226,11 @@ export const downDeployment = async (options) => {
120
226
  errors.push(`unable to remove container ${containerRef} (unit ${unit.id}): ${outcome.error}`);
121
227
  }
122
228
  }
123
- const report = await readCompileReport(compiledOutputDirectory);
124
- const volumeNames = [
125
- ...new Set((report?.container?.persistent_mounts ?? []).map((mount) => mount.volume_name)),
126
- ].sort();
127
- const retainedVolumes = [];
229
+ // Declared volumes are retained unconditionally: they are shared project
230
+ // state, not this deployment's, so `--volumes` must never destroy them.
231
+ const retainedVolumes = [...skipped];
128
232
  if (options.removeVolumes) {
129
- for (const volumeName of volumeNames) {
233
+ for (const volumeName of owned) {
130
234
  const outcome = await removeDockerVolume(record.target, volumeName, runnerOptions);
131
235
  if (!outcome.removed) {
132
236
  errors.push(`unable to remove volume ${volumeName}: ${outcome.error}`);
@@ -135,12 +239,13 @@ export const downDeployment = async (options) => {
135
239
  }
136
240
  }
137
241
  else {
138
- retainedVolumes.push(...volumeNames);
242
+ retainedVolumes.push(...owned);
139
243
  }
140
244
  return {
141
245
  deployment: record.name,
142
246
  errors,
143
247
  retained_volumes: retainedVolumes.sort(),
248
+ ...(skipped.length > 0 ? { skipped_volumes: skipped } : {}),
144
249
  units_stopped: unitsStopped.sort(),
145
250
  version: DOWN_RECEIPT_VERSION,
146
251
  };
@@ -6,8 +6,22 @@ import { z } from "zod";
6
6
  * `unit.id`, e.g. `"<deployment>-container"`), not raw Docker container ids, so a caller
7
7
  * can cross-reference the up-receipt/deployment record without re-deriving anything.
8
8
  * `retained_volumes` is "named volumes still present on disk after this call returns" —
9
- * true whether they were never touched (the default) or survived an attempted
10
- * `--volumes` removal that failed (surfaced in `errors`, not silently dropped).
9
+ * true whether they were never touched (the default), survived an attempted
10
+ * `--volumes` removal that failed (surfaced in `errors`, not silently dropped), or
11
+ * were deliberately skipped as shared project state (`skipped_volumes`).
12
+ *
13
+ * `skipped_volumes` is the third outcome this contract originally could not express.
14
+ * An author-declared volume name (a workspace resource `name`, a
15
+ * `store.persistence.name`, a memory bank's `persistence.name`) is verbatim in every
16
+ * mode and every deployment, so it is NOT "this deployment's named volume" — a
17
+ * `down --volumes` of a dev or scratch deployment would otherwise destroy the
18
+ * production state that same name refers to, whenever production happens to be
19
+ * stopped (Docker only refuses a volume that is currently in use). Those volumes are
20
+ * skipped, listed here AND in `retained_volumes`, and removing one is a deliberate
21
+ * project-level act: `docker volume rm <name>`.
22
+ *
23
+ * The field is OMITTED when nothing was skipped, so every receipt that could be
24
+ * produced before this existed is still byte-identical.
11
25
  */
12
26
  export declare const DOWN_RECEIPT_VERSION: "spawnfile.down-receipt.v1";
13
27
  export declare const downReceiptSchema: z.ZodObject<{
@@ -15,6 +29,7 @@ export declare const downReceiptSchema: z.ZodObject<{
15
29
  deployment: z.ZodString;
16
30
  units_stopped: z.ZodArray<z.ZodString>;
17
31
  retained_volumes: z.ZodArray<z.ZodString>;
32
+ skipped_volumes: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
33
  errors: z.ZodArray<z.ZodString>;
19
34
  }, z.core.$strict>;
20
35
  export type DownReceipt = z.infer<typeof downReceiptSchema>;
@@ -6,8 +6,22 @@ import { z } from "zod";
6
6
  * `unit.id`, e.g. `"<deployment>-container"`), not raw Docker container ids, so a caller
7
7
  * can cross-reference the up-receipt/deployment record without re-deriving anything.
8
8
  * `retained_volumes` is "named volumes still present on disk after this call returns" —
9
- * true whether they were never touched (the default) or survived an attempted
10
- * `--volumes` removal that failed (surfaced in `errors`, not silently dropped).
9
+ * true whether they were never touched (the default), survived an attempted
10
+ * `--volumes` removal that failed (surfaced in `errors`, not silently dropped), or
11
+ * were deliberately skipped as shared project state (`skipped_volumes`).
12
+ *
13
+ * `skipped_volumes` is the third outcome this contract originally could not express.
14
+ * An author-declared volume name (a workspace resource `name`, a
15
+ * `store.persistence.name`, a memory bank's `persistence.name`) is verbatim in every
16
+ * mode and every deployment, so it is NOT "this deployment's named volume" — a
17
+ * `down --volumes` of a dev or scratch deployment would otherwise destroy the
18
+ * production state that same name refers to, whenever production happens to be
19
+ * stopped (Docker only refuses a volume that is currently in use). Those volumes are
20
+ * skipped, listed here AND in `retained_volumes`, and removing one is a deliberate
21
+ * project-level act: `docker volume rm <name>`.
22
+ *
23
+ * The field is OMITTED when nothing was skipped, so every receipt that could be
24
+ * produced before this existed is still byte-identical.
11
25
  */
12
26
  export const DOWN_RECEIPT_VERSION = "spawnfile.down-receipt.v1";
13
27
  export const downReceiptSchema = z
@@ -16,6 +30,7 @@ export const downReceiptSchema = z
16
30
  deployment: z.string().min(1),
17
31
  units_stopped: z.array(z.string().min(1)),
18
32
  retained_volumes: z.array(z.string().min(1)),
33
+ skipped_volumes: z.array(z.string().min(1)).optional(),
19
34
  errors: z.array(z.string().min(1))
20
35
  })
21
36
  .strict();
@@ -1,12 +1,20 @@
1
1
  import type { DistributionReport } from "../distribution/index.js";
2
2
  import { type DeploymentRecord } from "./record.js";
3
+ export { HomeDeploymentRecordingError } from "./recordPublication.js";
3
4
  export declare const resolveHomeDeploymentsDirectory: () => string;
4
5
  export declare const resolveHomeDeploymentDirectory: (deploymentName: string) => string;
5
6
  export declare const resolveHomeRecordPath: (deploymentName: string) => string;
6
7
  export declare const resolveHomeReportPath: (deploymentName: string) => string;
8
+ /**
9
+ * Acquires an exclusive lock for a home deployment so concurrent `up`
10
+ * invocations (and a drained release holding it across its swap) cannot race
11
+ * on the same record or orphan each other's containers. Returns a release
12
+ * function. Throws if a live operation holds the lock; a lock left by a
13
+ * process that is gone is reclaimed. See `pidLock.ts`.
14
+ */
7
15
  export declare const acquireHomeDeploymentLock: (deploymentName: string) => Promise<() => Promise<void>>;
8
16
  /** Writes the record and the cached distribution report together, record last. */
9
- export declare const writeHomeDeployment: (record: DeploymentRecord, report: DistributionReport) => Promise<{
17
+ export declare const writeHomeDeployment: (record: DeploymentRecord, report: DistributionReport, previous?: DeploymentRecord | null) => Promise<{
10
18
  recordPath: string;
11
19
  reportPath: string;
12
20
  }>;
@@ -1,84 +1,47 @@
1
1
  import path from "node:path";
2
- import { open, readdir, rename, rm, writeFile } from "node:fs/promises";
2
+ import { readdir } from "node:fs/promises";
3
3
  import { resolveSpawnfileHome } from "../auth/index.js";
4
- import { ensureDirectory, readUtf8File } from "../filesystem/index.js";
4
+ import { ensureDirectory, readUtf8File, writeDurableFile } from "../filesystem/index.js";
5
5
  import { SpawnfileError } from "../shared/index.js";
6
6
  import { normalizeDeploymentName } from "./names.js";
7
+ import { acquirePidLock, PidLockBusyError } from "./pidLock.js";
7
8
  import { parseDeploymentRecord } from "./record.js";
9
+ import { bindDeploymentRecording, publishDeploymentRecord, writeAtomicDeploymentFile } from "./recordPublication.js";
10
+ export { HomeDeploymentRecordingError } from "./recordPublication.js";
8
11
  export const resolveHomeDeploymentsDirectory = () => path.join(resolveSpawnfileHome(), "deployments");
9
12
  export const resolveHomeDeploymentDirectory = (deploymentName) => path.join(resolveHomeDeploymentsDirectory(), normalizeDeploymentName(deploymentName));
10
13
  export const resolveHomeRecordPath = (deploymentName) => path.join(resolveHomeDeploymentDirectory(deploymentName), "record.json");
11
14
  export const resolveHomeReportPath = (deploymentName) => path.join(resolveHomeDeploymentDirectory(deploymentName), "spawnfile-report.json");
12
15
  /**
13
16
  * Acquires an exclusive lock for a home deployment so concurrent `up`
14
- * invocations cannot race on the same record (and orphan each other's
15
- * containers). Returns a release function. Throws if the deployment is already
16
- * locked by another in-flight operation.
17
+ * invocations (and a drained release holding it across its swap) cannot race
18
+ * on the same record or orphan each other's containers. Returns a release
19
+ * function. Throws if a live operation holds the lock; a lock left by a
20
+ * process that is gone is reclaimed. See `pidLock.ts`.
17
21
  */
18
- const isProcessAlive = (pid) => {
19
- try {
20
- process.kill(pid, 0);
21
- return true;
22
- }
23
- catch (error) {
24
- // ESRCH means no such process (stale); EPERM means it exists but is ours to
25
- // not signal — treat as alive to stay safe.
26
- return error.code === "EPERM";
27
- }
28
- };
29
22
  export const acquireHomeDeploymentLock = async (deploymentName) => {
30
23
  const directory = resolveHomeDeploymentDirectory(deploymentName);
31
24
  await ensureDirectory(directory);
32
- const lockPath = path.join(directory, ".lock");
33
- const write = async () => {
34
- const handle = await open(lockPath, "wx");
35
- try {
36
- await handle.write(JSON.stringify({ pid: process.pid }));
37
- }
38
- finally {
39
- await handle.close();
40
- }
41
- };
42
25
  try {
43
- await write();
26
+ return await acquirePidLock(path.join(directory, ".lock"));
44
27
  }
45
28
  catch (error) {
46
- if (error.code !== "EEXIST") {
47
- throw error;
48
- }
49
- // A lock exists. Reclaim it only if the owning process is gone (a crashed
50
- // deploy must not lock the deployment forever); otherwise it is genuinely busy.
51
- let ownerPid = null;
52
- try {
53
- ownerPid = JSON.parse(await readUtf8File(lockPath)).pid ?? null;
54
- }
55
- catch {
56
- ownerPid = null;
57
- }
58
- if (ownerPid !== null && isProcessAlive(ownerPid)) {
29
+ if (error instanceof PidLockBusyError) {
59
30
  throw new SpawnfileError("runtime_error", `Deployment "${normalizeDeploymentName(deploymentName)}" is already being modified by another operation`);
60
31
  }
61
- await rm(lockPath, { force: true });
62
- await write();
32
+ throw error;
63
33
  }
64
- return async () => {
65
- await rm(lockPath, { force: true });
66
- };
67
- };
68
- const writeAtomic = async (filePath, content) => {
69
- const temporaryPath = path.join(path.dirname(filePath), `.${path.basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
70
- await writeFile(temporaryPath, content, "utf8");
71
- await rename(temporaryPath, filePath);
72
34
  };
73
35
  /** Writes the record and the cached distribution report together, record last. */
74
- export const writeHomeDeployment = async (record, report) => {
36
+ export const writeHomeDeployment = async (record, report, previous) => {
75
37
  const parsed = parseDeploymentRecord(record);
76
38
  const directory = resolveHomeDeploymentDirectory(parsed.name);
77
39
  await ensureDirectory(directory);
78
40
  const reportPath = resolveHomeReportPath(parsed.name);
79
41
  const recordPath = resolveHomeRecordPath(parsed.name);
80
- await writeAtomic(reportPath, `${JSON.stringify(report, null, 2)}\n`);
81
- await writeAtomic(recordPath, `${JSON.stringify(parsed, null, 2)}\n`);
42
+ const reportBytes = `${JSON.stringify(report, null, 2)}\n`;
43
+ const bound = parseDeploymentRecord(bindDeploymentRecording(recordPath, parsed, report, reportBytes));
44
+ await publishDeploymentRecord(recordPath, bound, (durable) => (durable ? writeDurableFile : writeAtomicDeploymentFile)(reportPath, reportBytes), previous);
82
45
  return { recordPath, reportPath };
83
46
  };
84
47
  export const readHomeDeploymentRecord = async (deploymentName) => {
@@ -4,6 +4,8 @@ export * from "./artifactsExportPlan.js";
4
4
  export * from "./artifactsExportTypes.js";
5
5
  export * from "./privateArtifactsExport.js";
6
6
  export * from "./buildImageCacheStore.js";
7
+ export * from "./candidateDiagnostics.js";
8
+ export * from "./candidateRecording.js";
7
9
  export * from "./dockerLabels.js";
8
10
  export * from "./dockerInspect.js";
9
11
  export * from "./dockerLogs.js";
@@ -16,11 +18,19 @@ export * from "./downDeployment.js";
16
18
  export * from "./downReceiptTypes.js";
17
19
  export * from "./homeStore.js";
18
20
  export * from "./lifecycleCompletion.js";
21
+ export * from "./lifecycleUpRecords.js";
19
22
  export * from "./names.js";
20
23
  export * from "./organizationHandoffTypes.js";
21
24
  export * from "./organizationHandoffAuthorityTypes.js";
22
25
  export * from "./organizationHandoffAuthorityStore.js";
23
26
  export * from "./organizationReady.js";
27
+ export * from "./pidLock.js";
28
+ export * from "./canaryCutover.js";
29
+ export * from "./productStateClone.js";
24
30
  export * from "./record.js";
31
+ export * from "./recordedMemoryRetention.js";
25
32
  export * from "./target.js";
26
33
  export * from "./upReceiptTypes.js";
34
+ export * from "./resourceLog.js";
35
+ export * from "./activation.js";
36
+ export { bindDeploymentRecording, reconcileDeploymentResources } from "./recordPublication.js";
@@ -4,6 +4,8 @@ export * from "./artifactsExportPlan.js";
4
4
  export * from "./artifactsExportTypes.js";
5
5
  export * from "./privateArtifactsExport.js";
6
6
  export * from "./buildImageCacheStore.js";
7
+ export * from "./candidateDiagnostics.js";
8
+ export * from "./candidateRecording.js";
7
9
  export * from "./dockerLabels.js";
8
10
  export * from "./dockerInspect.js";
9
11
  export * from "./dockerLogs.js";
@@ -16,12 +18,20 @@ export * from "./downDeployment.js";
16
18
  export * from "./downReceiptTypes.js";
17
19
  export * from "./homeStore.js";
18
20
  export * from "./lifecycleCompletion.js";
21
+ export * from "./lifecycleUpRecords.js";
19
22
  export * from "./names.js";
20
23
  export * from "./organizationHandoffTypes.js";
21
24
  export * from "./organizationHandoffAuthorityTypes.js";
22
25
  export * from "./organizationHandoffAuthorityStore.js";
23
26
  export * from "./organizationReady.js";
27
+ export * from "./pidLock.js";
28
+ export * from "./canaryCutover.js";
29
+ export * from "./productStateClone.js";
24
30
  export * from "./record.js";
31
+ export * from "./recordedMemoryRetention.js";
25
32
  // Compatibility target exports remain available from this legacy deployment barrel.
26
33
  export * from "./target.js";
27
34
  export * from "./upReceiptTypes.js";
35
+ export * from "./resourceLog.js";
36
+ export * from "./activation.js";
37
+ export { bindDeploymentRecording, reconcileDeploymentResources } from "./recordPublication.js";
@@ -6,6 +6,10 @@ export declare const LIFECYCLE_OWNER_VERSION: "spawnfile.lifecycle-owner.v1";
6
6
  export declare const LIFECYCLE_ADMISSION_VERSION: "spawnfile.lifecycle-admission.v1";
7
7
  export declare const LIFECYCLE_AMBIGUOUS_VERSION: "spawnfile.lifecycle-ambiguous.v1";
8
8
  export declare const LIFECYCLE_TERMINAL_VERSION: "spawnfile.lifecycle-terminal.v1";
9
+ export declare const LIFECYCLE_UP_START_VERSION: "spawnfile.lifecycle-up-start.v1";
10
+ export declare const LIFECYCLE_UP_RESERVATION_VERSION: "spawnfile.lifecycle-up-reservation.v1";
11
+ export declare const LIFECYCLE_UP_CLEANUP_VERSION: "spawnfile.lifecycle-up-cleanup.v1";
12
+ export declare const LIFECYCLE_UP_EXTRA_LABELS: "image-config-labels";
9
13
  export declare const LIFECYCLE_RECORD_MAX_BYTES = 1000000;
10
14
  export declare const lifecycleIdSchema: z.ZodString;
11
15
  export declare const lifecycleInvocationSchema: z.ZodObject<{
@@ -94,6 +98,68 @@ export declare const lifecycleCompletionSchema: z.ZodObject<{
94
98
  version: z.ZodLiteral<"spawnfile.lifecycle-completion.v1">;
95
99
  }, z.core.$strict>;
96
100
  export type LifecycleCompletion = z.infer<typeof lifecycleCompletionSchema>;
101
+ export declare const lifecycleUpReservationSchema: z.ZodObject<{
102
+ container_name: z.ZodString;
103
+ docker_command: z.ZodString;
104
+ docker_context: z.ZodNullable<z.ZodString>;
105
+ invocation: z.ZodObject<{
106
+ correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
107
+ id: z.ZodString;
108
+ operation: z.ZodEnum<{
109
+ down: "down";
110
+ up: "up";
111
+ artifacts_export: "artifacts_export";
112
+ }>;
113
+ request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
114
+ version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
115
+ }, z.core.$strict>;
116
+ label_authority: z.ZodObject<{
117
+ required: z.ZodRecord<z.ZodString, z.ZodString>;
118
+ permitted_extra_labels: z.ZodLiteral<"image-config-labels">;
119
+ }, z.core.$strict>;
120
+ version: z.ZodLiteral<"spawnfile.lifecycle-up-reservation.v1">;
121
+ }, z.core.$strict>;
122
+ export type LifecycleUpReservation = z.infer<typeof lifecycleUpReservationSchema>;
123
+ export declare const lifecycleUpStartSchema: z.ZodObject<{
124
+ attempt: z.ZodNumber;
125
+ container_id: z.ZodString;
126
+ container_name: z.ZodString;
127
+ image_id: z.ZodString;
128
+ invocation: z.ZodObject<{
129
+ correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
130
+ id: z.ZodString;
131
+ operation: z.ZodEnum<{
132
+ down: "down";
133
+ up: "up";
134
+ artifacts_export: "artifacts_export";
135
+ }>;
136
+ request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
137
+ version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
138
+ }, z.core.$strict>;
139
+ label_authority: z.ZodObject<{
140
+ required: z.ZodRecord<z.ZodString, z.ZodString>;
141
+ permitted_extra_labels: z.ZodLiteral<"image-config-labels">;
142
+ }, z.core.$strict>;
143
+ version: z.ZodLiteral<"spawnfile.lifecycle-up-start.v1">;
144
+ }, z.core.$strict>;
145
+ export type LifecycleUpStart = z.infer<typeof lifecycleUpStartSchema>;
146
+ export declare const lifecycleUpCleanupSchema: z.ZodObject<{
147
+ attempt: z.ZodNumber;
148
+ container_id: z.ZodString;
149
+ invocation: z.ZodObject<{
150
+ correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
151
+ id: z.ZodString;
152
+ operation: z.ZodEnum<{
153
+ down: "down";
154
+ up: "up";
155
+ artifacts_export: "artifacts_export";
156
+ }>;
157
+ request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
158
+ version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
159
+ }, z.core.$strict>;
160
+ version: z.ZodLiteral<"spawnfile.lifecycle-up-cleanup.v1">;
161
+ }, z.core.$strict>;
162
+ export type LifecycleUpCleanup = z.infer<typeof lifecycleUpCleanupSchema>;
97
163
  export declare const lifecycleTerminalSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
98
164
  completion: z.ZodObject<{
99
165
  invocation: z.ZodObject<{
@@ -7,6 +7,11 @@ export const LIFECYCLE_OWNER_VERSION = "spawnfile.lifecycle-owner.v1";
7
7
  export const LIFECYCLE_ADMISSION_VERSION = "spawnfile.lifecycle-admission.v1";
8
8
  export const LIFECYCLE_AMBIGUOUS_VERSION = "spawnfile.lifecycle-ambiguous.v1";
9
9
  export const LIFECYCLE_TERMINAL_VERSION = "spawnfile.lifecycle-terminal.v1";
10
+ export const LIFECYCLE_UP_START_VERSION = "spawnfile.lifecycle-up-start.v1";
11
+ export const LIFECYCLE_UP_RESERVATION_VERSION = "spawnfile.lifecycle-up-reservation.v1";
12
+ export const LIFECYCLE_UP_CLEANUP_VERSION = "spawnfile.lifecycle-up-cleanup.v1";
13
+ // Docker carries an image's config labels onto a container; no other extras are allowed.
14
+ export const LIFECYCLE_UP_EXTRA_LABELS = "image-config-labels";
10
15
  export const LIFECYCLE_RECORD_MAX_BYTES = 1_000_000;
11
16
  export const lifecycleIdSchema = z
12
17
  .string()
@@ -70,6 +75,35 @@ export const lifecycleCompletionSchema = z
70
75
  version: z.literal(LIFECYCLE_COMPLETION_VERSION),
71
76
  })
72
77
  .strict();
78
+ const lifecycleUpLabelAuthoritySchema = z.object({
79
+ required: z.record(z.string().min(1).max(255), z.string().max(4096)),
80
+ permitted_extra_labels: z.literal(LIFECYCLE_UP_EXTRA_LABELS),
81
+ }).strict();
82
+ export const lifecycleUpReservationSchema = z.object({
83
+ container_name: z.string().min(1).max(255),
84
+ docker_command: z.string().min(1).max(4096),
85
+ docker_context: z.string().min(1).max(128).nullable(),
86
+ invocation: lifecycleInvocationSchema,
87
+ label_authority: lifecycleUpLabelAuthoritySchema,
88
+ version: z.literal(LIFECYCLE_UP_RESERVATION_VERSION),
89
+ }).strict();
90
+ export const lifecycleUpStartSchema = z
91
+ .object({
92
+ attempt: z.number().int().min(0).max(16),
93
+ container_id: z.string().regex(/^[a-f0-9]{64}$/u),
94
+ container_name: z.string().min(1).max(255),
95
+ image_id: z.string().regex(/^sha256:[a-f0-9]{64}$/u),
96
+ invocation: lifecycleInvocationSchema,
97
+ label_authority: lifecycleUpLabelAuthoritySchema,
98
+ version: z.literal(LIFECYCLE_UP_START_VERSION),
99
+ })
100
+ .strict();
101
+ export const lifecycleUpCleanupSchema = z.object({
102
+ attempt: z.number().int().min(0).max(16),
103
+ container_id: z.string().regex(/^[a-f0-9]{64}$/u),
104
+ invocation: lifecycleInvocationSchema,
105
+ version: z.literal(LIFECYCLE_UP_CLEANUP_VERSION),
106
+ }).strict();
73
107
  export const lifecycleTerminalSchema = z.discriminatedUnion("status", [
74
108
  z
75
109
  .object({
@@ -1,9 +1,12 @@
1
1
  export declare const failLifecycleStore: (message: string) => never;
2
2
  export declare const resolveLifecycleCompletionDirectory: () => string;
3
- export declare const lifecycleRecordName: (id: string, kind: "admission" | "completion" | "evidence" | "plan" | "recovery") => string;
3
+ export declare const lifecycleRecordName: (id: string, kind: "admission" | "completion" | "evidence" | "plan" | "recovery" | "up-reservation") => string;
4
4
  export declare const resolveLifecycleCompletionPath: (id: string) => string;
5
5
  export declare const admissionPath: (id: string) => string;
6
6
  export declare const planPath: (id: string) => string;
7
7
  export declare const recoveryPath: (id: string) => string;
8
8
  export declare const evidencePath: (id: string) => string;
9
+ export declare const upReservationPath: (id: string) => string;
10
+ export declare const upStartPath: (id: string, attempt: number) => string;
11
+ export declare const upCleanupPath: (id: string, attempt: number) => string;
9
12
  export declare const heartbeatPath: (id: string) => string;
@@ -13,4 +13,7 @@ export const admissionPath = (id) => lifecyclePath(id, "admission");
13
13
  export const planPath = (id) => lifecyclePath(id, "plan");
14
14
  export const recoveryPath = (id) => lifecyclePath(id, "recovery");
15
15
  export const evidencePath = (id) => lifecyclePath(id, "evidence");
16
+ export const upReservationPath = (id) => lifecyclePath(id, "up-reservation");
17
+ export const upStartPath = (id, attempt) => path.join(resolveLifecycleCompletionDirectory(), `${lifecycleIdSchema.parse(id)}.up-start-${attempt}`);
18
+ export const upCleanupPath = (id, attempt) => path.join(resolveLifecycleCompletionDirectory(), `${lifecycleIdSchema.parse(id)}.up-cleanup-${attempt}`);
16
19
  export const heartbeatPath = (id) => path.join(resolveLifecycleCompletionDirectory(), `${lifecycleIdSchema.parse(id)}.heartbeat`);
@@ -1,5 +1,7 @@
1
1
  type RecordReader = (file: string, links?: readonly number[]) => Promise<string | null>;
2
+ export declare const LIFECYCLE_PUBLICATION_SETTLE_TIMEOUT_MS = 1000;
2
3
  export declare const settleLifecyclePublication: (file: string) => Promise<void>;
4
+ export declare const settleLifecyclePublicationUntil: (settled: () => Promise<boolean>) => Promise<void>;
3
5
  export declare const readSettledLifecycleRecord: (file: string, read: RecordReader) => Promise<string | null>;
4
6
  export declare const matchesSettledLifecyclePublication: (file: string, expected: string, read: RecordReader) => Promise<boolean>;
5
7
  export {};
@@ -1,16 +1,30 @@
1
1
  import { lstat } from "node:fs/promises";
2
+ import { performance } from "node:perf_hooks";
2
3
  import { SpawnfileError } from "../shared/index.js";
4
+ // A competing publisher removes its temporary hard link asynchronously. A
5
+ // short run of event-loop turns can elapse before that unlink is scheduled
6
+ // when many lifecycle operations are active, so leave a bounded but practical
7
+ // window before treating an extra link as hostile.
8
+ export const LIFECYCLE_PUBLICATION_SETTLE_TIMEOUT_MS = 1_000;
9
+ const LIFECYCLE_PUBLICATION_SETTLE_BACKOFF_MS = 2;
3
10
  const refuse = (message) => {
4
11
  throw new SpawnfileError("runtime_error", `Lifecycle completion store refused: ${message}`);
5
12
  };
6
13
  export const settleLifecyclePublication = async (file) => {
7
- for (let attempt = 0; attempt < 16; attempt += 1) {
14
+ await settleLifecyclePublicationUntil(async () => {
8
15
  const info = await lstat(file).catch(() => refuse("publication changed"));
9
- if (info.nlink === 1)
16
+ return info.nlink === 1;
17
+ });
18
+ };
19
+ export const settleLifecyclePublicationUntil = async (settled) => {
20
+ const deadline = performance.now() + LIFECYCLE_PUBLICATION_SETTLE_TIMEOUT_MS;
21
+ while (true) {
22
+ if (await settled())
10
23
  return;
11
- await new Promise((resolve) => setImmediate(resolve));
24
+ if (performance.now() >= deadline)
25
+ refuse("publication did not settle");
26
+ await new Promise((resolve) => setTimeout(resolve, LIFECYCLE_PUBLICATION_SETTLE_BACKOFF_MS));
12
27
  }
13
- refuse("publication did not settle");
14
28
  };
15
29
  export const readSettledLifecycleRecord = async (file, read) => {
16
30
  const text = await read(file, [1, 2]);
@@ -1,4 +1,4 @@
1
- export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
1
+ export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, upCleanupPath, upReservationPath, upStartPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
2
2
  export { existingLifecycleRoot, lifecycleRoot, syncLifecycleDirectory } from "./lifecycleCompletionRoot.js";
3
3
  export type LifecycleStoreTestHookPoint = "before_missing_return" | "before_record_open" | "before_publish_link" | "before_publish_temp_open" | "before_publish_unlink";
4
4
  export declare const setLifecycleStoreTestHook: (hook: ((point: LifecycleStoreTestHookPoint) => Promise<void> | void) | null) => void;