1 import Base 2 import ./execution_context.bend as Ctx 3 import ./ordinary_app_execution.bend as Execution 4 import ./ordinary_app_event_family_runtime.bend as Family 5 import ./event_family_routing.bend as Route 6 import ./ordinary_app_checked_schedule.bend as Old 7 import ./ordinary_app_schedule.bend as Single 8 import ./ordinary_app_schema.bend as App 9 import ./ordinary_app_composer.bend as Build 10 import ./ordinary_app_observation_data.bend as DTO 11 import ./ordinary_app_registration_fields.bend as Fields 12 import ./ordinary_checked_bindings.bend as B 13 import ./world.bend as W 14 import ./system.bend as Sys 15 import ./schedule_provision.bend as SP 16 import ./checked_condition_schedule.bend as Checked 17 # Family and tick are an opaque part of the existing scheduler owner. 18 # The existing reader-owner fold remains the sole metadata source. 19 def folded(~S:Data,~H:Type,~F:Type,held:F & Nat,value:H & List<&2,Fields.Fields>) -> (H & (F & Nat)) & List<&2,Fields.Fields>: 20 match value: 21 case (owners,fields):((owners,held),fields) 22 def fold_family(~S:Data,~H:Type,~F:Type,~fold:H -> H & List<&2,Fields.Fields>,value:H & (F & Nat)) -> (H & (F & Nat)) & List<&2,Fields.Fields>: 23 match value: 24 case (owners,held):folded(~S,~H,~F,held,fold(owners)) 25 type Application -> W.World & DTO.Observation,-fold:H -> H & List<&2,Fields.Fields>,B:Type,-select:B -> W.World -> U32 -> B.Selection,B>> is Type: 26 Application{app:Old.Application} 27 type Attachment<-Original:Type,-Guards:Type,-Scheduled:Type> is Type: 28 Attached{app:Scheduled} 29 Invalid{app:Original,bindings:Guards} 30 def original(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,value:App.Application) -> Family.Application: 31 match value: 32 case App.Application{schema,Build.Registered{world,(owners,(family,tick)),recipe,debug}}:Family.Application{schema,Route.Runtime{world,family,tick},owners,recipe,debug} 33 def checked(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,value:Old.Attachment,B.Bindings,B,select>,Old.Application>) -> Attachment,B.Bindings,B,select>,Application>: 34 match value: 35 case Old.Attached{app}:Attached{Application{app}} 36 case Old.Invalid{Single.Application{app,_,_,_,_,_},bindings}:Invalid{original(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,app),bindings} 37 def scheduled(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,bindings:B.Bindings,B,select>,value:Single.Attachment,Single.Application>) -> Attachment,B.Bindings,B,select>,Application>: 38 match value: 39 case Single.Invalid{app}:Invalid{original(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,app),bindings} 40 case Single.Attached{app}:checked(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,~B,~select,Old.attach(~S,~C,~R,~E,~(H & (F & Nat)),~Rows,~observe,~fold_family(~S,~H,~F,~fold),~B,~select,app,bindings)) 41 def attach(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,value:Family.Application,name:String,plan:SP.Plan,bindings:B.Bindings,B,select>) -> Attachment,B.Bindings,B,select>,Application>: 42 match value: 43 case Family.Application{schema,Route.Runtime{world,family,tick},owners,recipe,debug}:scheduled(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,~B,~select,bindings,Single.attach(~S,~C,~R,~E,~(H & (F & Nat)),~Rows,~observe,~fold_family(~S,~H,~F,~fold),App.Application{schema,Build.Registered{world,(owners,(family,tick)),recipe,debug}},name,plan)) 44 def enabled(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,value:Application,flag:Bool) -> Application: 45 match value: 46 case Application{app}:Application{Old.enabled(~S,~C,~R,~E,~(H & (F & Nat)),~Rows,~observe,~fold_family(~S,~H,~F,~fold),~B,~select,app,flag)} 47 def observed(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,value:Old.Application & Maybe<&2,Old.Description>) -> Application & Maybe<&2,Old.Description>: 48 match value: 49 case (app,view):(Application{app},view) 50 def snapshot(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,value:Application) -> Application & Maybe<&2,Old.Description>: 51 match value: 52 case Application{app}:observed(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,~B,~select,Old.snapshot(~S,~C,~R,~E,~(H & (F & Nat)),~Rows,~observe,~fold_family(~S,~H,~F,~fold),~B,~select,app)) 53 def returned(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,~Error:Data,value:Single.RunResult,S,Checked.Error>) -> Single.RunResult,S,Checked.Error>: 54 match value: 55 case Single.Finished{app,observations}:Single.Finished{Application{app},observations} 56 case Single.Failed{app,error,observations}:Single.Failed{Application{app},error,observations} 57 case Single.Rejected{app}:Single.Rejected{Application{app}} 58 case Single.Missing{app,requirements}:Single.Missing{Application{app},requirements} 59 def run_classic(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,~Error:Data,~dispatch:(H & (F & Nat)) -> W.World -> U32 -> (H & (F & Nat)) & Sys.Outcome,Error,Unit>,~provision:W.World -> W.World & List<&2,SP.Requirement>,value:Application) -> Single.RunResult,S,Checked.Error>: 60 match value: 61 case Application{app}:returned(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,~B,~select,~Error,Old.run_classic(~S,~C,~R,~E,~(H & (F & Nat)),~Rows,~observe,~fold_family(~S,~H,~F,~fold),~B,~select,~Error,~dispatch,~provision,app)) 62 63 def returned_context(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,~Error:Data,value:Execution.Run,S,Checked.Error>) -> Execution.Run,S,Checked.Error>: 64 match value: 65 case Execution.Run{result,batch}:Execution.Run{returned(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,~B,~select,~Error,result),batch} 66 67 def run(~S:Data,~C:Type,~R:Type,~E:Data,~F:Type,~H:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~fold:H -> H & List<&2,Fields.Fields>,~B:Type,~select:B -> W.World -> U32 -> B.Selection,B>,~Error:Data,~dispatch:(H & (F & Nat)) -> Ctx.Context> -> U32 -> (H & (F & Nat)) & Sys.Outcome>,Error,Unit>,~provision:W.World -> W.World & List<&2,SP.Requirement>,value:Application) -> Execution.Run,S,Checked.Error>: 68 match value: 69 case Application{app}:returned_context(~S,~C,~R,~E,~F,~H,~Rows,~observe,~fold,~B,~select,~Error,Old.run(~S,~C,~R,~E,~(H & (F & Nat)),~Rows,~observe,~fold_family(~S,~H,~F,~fold),~B,~select,~Error,~dispatch,~provision,app))