1 import Base 2 import ./decode_data.bend as D 3 import ./decode_capabilities.bend as Public 4 import ./decode.bend as Complete 5 import ./ordinary_declaration.bend as Canonical 6 7 # Extensions of ONE ordinary nominal identity, shared with ordinary query paths. 8 # Schema authoring is trusted; no language-wide constructor secrecy is asserted. 9 type Plain<-S:Data,-P:Type,-identity:Canonical.Declaration> is Data: 10 Plain{} 11 type Transient<-S:Data,-P:Type,-identity:Canonical.Declaration> is Data: 12 Transient{} 13 type Constructed<-S:Data,-P:Type,-identity:Canonical.Declaration,-project:P -> P & D.Raw> is Data: 14 Constructed{codec:D.Codec} 15 def plain(~S:Data,~P:Type,~identity:Canonical.Declaration) -> Plain: 16 Plain{} 17 def transient(~S:Data,~P:Type,~identity:Canonical.Declaration) -> Transient: 18 Transient{} 19 def constructed(~S:Data,~P:Type,~identity:Canonical.Declaration,~project:P -> P & D.Raw,codec:D.Codec) -> Constructed: 20 Constructed{codec} 21 def codec(~S:Data,~P:Type,~identity:Canonical.Declaration,~project:P -> P & D.Raw,declaration:Constructed) -> D.Codec: 22 match declaration: 23 case Constructed{codec}:codec 24 25 # The SAME retained declaration supplies complete #46 validation and save codec. 26 # Projects once; no caller fuel/depth and no automatic Raw -> arbitrary P inverse. 27 def validate(~S:Data,~P:Type,~identity:Canonical.Declaration,~project:P -> P & D.Raw,declaration:Constructed,owner:P) -> D.Receipt

: 28 Complete.decode_owner(~P,~project,codec(~S,~P,~identity,~project,declaration),owner) 29 def prepare(~S:Data,~P:Type,~identity:Canonical.Declaration,~project:P -> P & D.Raw,+declaration:Constructed,owner:P) -> Constructed & D.Receipt

: 30 (declaration,validate(~S,~P,~identity,~project,declaration,owner)) 31 32 # Actual generic public admission callback retains every incoming affine owner. 33 # The retained list is a transport context, never the live ECS Store. 34 type Context<-S:Data,-P:Type,-identity:Canonical.Declaration,-project:P -> P & D.Raw> is Type: 35 Context{declaration:Constructed,retained:List

} 36 def decode(~S:Data,~P:Type,~identity:Canonical.Declaration,~project:P -> P & D.Raw,context:Context,owner:P) -> Context & D.Receipt

: 37 match context: 38 case Context{+declaration,retained}:(Context{declaration,retained},validate(~S,~P,~identity,~project,declaration,owner)) 39 def admit(~S:Data,~P:Type,~identity:Canonical.Declaration,~project:P -> P & D.Raw,context:Context,receipt:D.Receipt

) -> Context & D.Checked: 40 match context receipt: 41 case Context{declaration,retained} D.Receipt{owner,checked}:(Context{declaration,owner <> retained},checked) 42 def request(~S:Data,~P:Type,~identity:Canonical.Declaration,~project:P -> P & D.Raw,context:Context,owner:P) -> Context & D.Checked: 43 Public.request(~P,~Context,~D.Checked,~decode(~S,~P,~identity,~project),~admit(~S,~P,~identity,~project),context,owner)