@@ -4628,14 +4628,25 @@
46284628:: proofs to fewer than 1,024 cells; the projection planner has a separate
46294629:: 4,096-step bound. These are inference limits, not language limits.
46304630::
4631−:: A single plain API path with one full mark can expose a polymorphic
4632−:: request-gate type through ordinary imports. Its source-derived schema,
4633−:: canonical API path and complete dependency evidence travel with checked
4634−:: interfaces. The closure is bound to the exact supplied bundle, prelude,
4635−:: scope and trusted reader results; unknown cached entries are rebuilt.
4636−:: Request-bearing closures are limited to 256 source paths and requests.
4637−:: This is type inference only: there is no request lowering, runtime schema
4638−:: validator or proof that an arbitrary ask value is watchable.
4631+:: Supported API imports derive request-gate types atomically for multiple
4632+:: paths, including one typed segment or one diff fold per case. Their checked
4633+:: ordinary definitions, mark molds and supported poke constructor are also
4634+:: exported. A selected /sur mold is checked through its trusted reader result;
4635+:: unused cores and other bindings are not independently validated. APIs
4636+:: with /= imports, separate scry paths, multiple parameters or diffs, or a
4637+:: parameter together with a fold remain unsupported. The unchanged todo API
4638+:: fits this fragment, including named closed fold gates.
4639+::
4640+:: Each case's source-derived schema and canonical API identity travel in a
4641+:: dependency closure bound to the exact supplied bundle, prelude, scope and
4642+:: trusted reader results. Unknown cached entries are rebuilt. Request-bearing
4643+:: closures are limited to 256 source paths and requests. This is type
4644+:: inference only: no request lowering, runtime schema validator or proof that
4645+:: an arbitrary ask value is watchable is supplied.
4646+::
4647+:: A closed gate sample may omit one outer face from a known input slot when
4648+:: its product is identical. Distinct written names, nested value faces,
4649+:: ambiguous cell tails and raw-variable-origin fits retain their prior rules.
46394650::
46404651:: In one synthetic eval of a 48-module deep and 48-module wide request-free
46414652:: graph, baseline versus certificate inference took 21.53 s versus 23.10 s
@@ -4967,6 +4978,42 @@
49674978 * |
49684979 ==
49694980::
4981+:: Closed function samples may omit a slot face, but a known name must
4982+:: match another known name. Keep nested value faces and require exact
4983+:: invariant compatibility; a faced tail against a cell is ambiguous.
4984+++ itype-closed-slot-match
4985+ |= [a=itype b=itype]
4986+ ^- ?
4987+ ?: &(?=(%face -.a) ?=(%face -.b))
4988+ ?. =(name.a name.b) |
4989+ ?=(^ (itype-unify body.a body.b ~))
4990+ ?: ?=(%face -.a) ?=(^ (itype-unify body.a b ~))
4991+ ?: ?=(%face -.b) ?=(^ (itype-unify a body.b ~))
4992+ ?=(^ (itype-unify a b ~))
4993+++ itype-closed-sample-match
4994+ |= [a=itype b=itype fuel=@ud]
4995+ ^- ?
4996+ ?: =(0 fuel) |
4997+ ?. &(?=(%cell -.a) ?=(%cell -.b)) |
4998+ ?. (itype-closed-slot-match hed.a hed.b) |
4999+ =/ x=itype tal.a
5000+ =/ y=itype tal.b
5001+ ?: &(?=(%cell -.x) ?=(%cell -.y))
5002+ ?=(^ (itype-unify x y ~))
5003+ ?: |(&(?=(%face -.x) ?=(%cell -.y)) &(?=(%cell -.x) ?=(%face -.y))) |
5004+ (itype-closed-slot-match x y)
5005+++ itype-closed-gates-match
5006+ |= [a=itype b=itype]
5007+ ^- ?
5008+ ?. &(?=(%fn -.a) ?=(%fn -.b)) |
5009+ ?. &(?=(%cell -.sample.a) ?=(%cell -.sample.b)) |
5010+ ?. =(product.a product.b) |
5011+ ?^ (itype-vars a) |
5012+ ?^ (itype-vars b) |
5013+ ?: |((itype-has-tag a) (itype-has-tag b)) |
5014+ ?. (itype-closed-sample-match sample.a sample.b 1.024) |
5015+ ?=(^ (itype-unify product.a product.b ~))
5016+::
49705017++ itype-face-asym-collection-args
49715018 |= [as=(list itype) bs=(list itype) sub=isub]
49725019 ^- ?
@@ -5012,6 +5059,12 @@
50125059:: labels. Ignore one raw sample-slot face per written argument while
50135060:: checking value faces as usual. An unknown or variable-bound cell spine
50145061:: cannot justify this distinction, so keep the existing conservative guard.
5062+++ itype-positional-slot-face-asym
5063+ |= [actual=itype expected=itype sub=isub]
5064+ ^- ?
5065+ ?: &(?=(%fn -.actual) ?=(%fn -.expected) (itype-closed-gates-match actual expected)) |
5066+ (itype-face-asym actual expected sub)
5067+::
50155068++ itype-positional-face-asym
50165069 |= [args=(list expr) actual=itype expected=itype sub=isub]
50175070 ^- ?
@@ -5019,11 +5072,11 @@
50195072 ?~ t.args
50205073 =/ slot=itype expected
50215074 =? slot ?=(%face -.slot) body.slot
5022− (itype-face-asym actual slot sub)
5075+ (itype-positional-slot-face-asym actual slot sub)
50235076 ?. &(?=(%cell -.actual) ?=(%cell -.expected)) &
50245077 =/ slot=itype hed.expected
50255078 =? slot ?=(%face -.slot) body.slot
5026− ?: (itype-face-asym hed.actual slot sub) &
5079+ ?: (itype-positional-slot-face-asym hed.actual slot sub) &
50275080 $(args t.args, actual tal.actual, expected tal.expected)
50285081::
50295082++ itype-output-may-be-cell
@@ -5333,6 +5386,7 @@
53335386 $(actual body.actual, expected body.expected, skip-width |, spine-proof |)
53345387 ?: ?=(%face -.actual) $(actual body.actual, skip-width |, spine-proof |)
53355388 ?: ?=(%face -.expected) $(expected body.expected, skip-width |, spine-proof |)
5389+ ?: &(!uncertain (itype-closed-gates-match actual expected)) [%ok sub next]
53365390 ?: (itype-face-asym actual expected sub) [%unknown ~]
53375391 ?: |((itype-has-any-atom actual sub) (itype-has-any-atom expected sub))
53385392 [%unknown ~]
@@ -10852,17 +10906,24 @@
1085210906 =/ parsed (parse file src)
1085310907 ?: ?=(%| -.parsed) [%| 'request source does not parse']
1085410908 =/ mod=module p.parsed
10855− ?. ?=([[%mark *] ~] imports.mod) [%| 'request imports need unsupported inference']
10909+ ?. ?=(?([[%mark *] ~] [[%mark *] [%mark *] ~]) imports.mod) [%| 'request imports need unsupported inference']
1085610910 ?. ?=([[%mold *] ~] defs.mod) [%| 'request definitions need unsupported inference']
1085710911 ?. =(%paths name.i.defs.mod) [%| 'request declaration needs unsupported inference']
1085810912 ?. ?=([* ~] paths.ev) [%| 'request count needs unsupported inference']
1085910913 =/ p=iapi-path-typed i.paths.ev
1086010914 =/ parts=(unit iapi-request-parts) (api-request-parts `ev name.path.p)
1086110915 ?~ parts [%| 'request components need unsupported inference']
10862− ?^ parameters.u.parts [%| 'request parameters need unsupported inference']
10863− ?^ fold.u.parts [%| 'request fold needs unsupported inference']
10916+ ?. ?=(?(~ [* ~]) parameters.u.parts) [%| 'request parameters need unsupported inference']
10917+ ?: &(?=(^ fold.u.parts) ?=(^ parameters.u.parts)) [%| 'request parameter and fold need unsupported inference']
1086410918 ?^ scry.path.p [%| 'request scry needs unsupported inference']
10865− ?. ?=([* ~] marks.support) [%| 'request marks need unsupported inference']
10919+ =/ valid-marks=?
10920+ ?~ fold.u.parts ?=([* ~] marks.support)
10921+ ?=([* [* ~]] marks.support)
10922+ ?. valid-marks [%| 'request marks need unsupported inference']
10923+ =/ fold-open=?
10924+ ?~ fold.u.parts |
10925+ |(?=(^ (itype-vars u.fold.u.parts)) (itype-has-tag u.fold.u.parts))
10926+ ?: fold-open [%| 'request fold needs unsupported inference']
1086610927 ?^ (itype-vars reply-sample.u.parts) [%| 'request payload needs unsupported inference']
1086710928 ?: (itype-has-tag reply-sample.u.parts) [%| 'request payload needs unsupported inference']
1086810929 =/ ask=(unit ischeme) (request-compatible-ask prepared.ev)
@@ -10870,8 +10931,13 @@
1087010931 =/ result=(unit itype) (template-apply u.ask ~[[%var 0]])
1087110932 ?~ result [%| 'request ask needs unsupported inference']
1087210933 =/ callback=itype [%fn reply-sample.u.parts [%var 0]]
10873− =/ scheme=ischeme [[%fn callback u.result] ~[0]]
10874− =/ mark=iapi-mark-type i.marks.support
10934+ =/ sample=itype
10935+ ?^ fold.u.parts [%cell callback u.fold.u.parts]
10936+ ?~ parameters.u.parts callback
10937+ [%cell typ.i.parameters.u.parts callback]
10938+ =/ scheme=ischeme [[%fn sample u.result] ~[0]]
10939+ =/ exports=imold-types
10940+ (turn marks.support |=(m=iapi-mark-type [name.m [typ.m ~]]))
1087510941 =/ prelude=iprelude prepared.ev
1087610942 =/ public=ifile iface.prelude
1087710943 ?~ source.public [%| 'request prelude source needs unsupported inference']
@@ -10881,7 +10947,7 @@
1088110947 ?~ source.i.private [%| 'request internal source needs unsupported inference']
1088210948 =/ req=irequest-evidence
1088310949 [file name.path.p p src u.source.public u.source.i.private values.prelude molds.prelude externals marks]
10884− =/ interface=ifile [~[[name.path.p scheme]] ~[[name.mark [typ.mark ~]]] file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
10950+ =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
1088510951 [%& [support u.parts interface]]
1088610952:: Graph-aware request artifact; resolver use remains type-only.
1088710953++ one-request-interface-graph
@@ -10894,17 +10960,24 @@
1089410960 =/ parsed (parse file src)
1089510961 ?: ?=(%| -.parsed) [%| 'request source does not parse']
1089610962 =/ mod=module p.parsed
10897− ?. ?=([[%mark *] ~] imports.mod) [%| 'request imports need unsupported inference']
10963+ ?. ?=(?([[%mark *] ~] [[%mark *] [%mark *] ~]) imports.mod) [%| 'request imports need unsupported inference']
1089810964 ?. ?=([[%mold *] ~] defs.mod) [%| 'request definitions need unsupported inference']
1089910965 ?. =(%paths name.i.defs.mod) [%| 'request declaration needs unsupported inference']
1090010966 ?. ?=([* ~] paths.ev) [%| 'request count needs unsupported inference']
1090110967 =/ p=iapi-path-typed i.paths.ev
1090210968 =/ parts=(unit iapi-request-parts) (api-request-parts `ev name.path.p)
1090310969 ?~ parts [%| 'request components need unsupported inference']
10904− ?^ parameters.u.parts [%| 'request parameters need unsupported inference']
10905− ?^ fold.u.parts [%| 'request fold needs unsupported inference']
10970+ ?. ?=(?(~ [* ~]) parameters.u.parts) [%| 'request parameters need unsupported inference']
10971+ ?: &(?=(^ fold.u.parts) ?=(^ parameters.u.parts)) [%| 'request parameter and fold need unsupported inference']
1090610972 ?^ scry.path.p [%| 'request scry needs unsupported inference']
10907− ?. ?=([* ~] marks.support) [%| 'request marks need unsupported inference']
10973+ =/ valid-marks=?
10974+ ?~ fold.u.parts ?=([* ~] marks.support)
10975+ ?=([* [* ~]] marks.support)
10976+ ?. valid-marks [%| 'request marks need unsupported inference']
10977+ =/ fold-open=?
10978+ ?~ fold.u.parts |
10979+ |(?=(^ (itype-vars u.fold.u.parts)) (itype-has-tag u.fold.u.parts))
10980+ ?: fold-open [%| 'request fold needs unsupported inference']
1090810981 ?^ (itype-vars reply-sample.u.parts) [%| 'request payload needs unsupported inference']
1090910982 ?: (itype-has-tag reply-sample.u.parts) [%| 'request payload needs unsupported inference']
1091010983 =/ ask=(unit ischeme) (request-compatible-ask prepared.ev)
@@ -10912,8 +10985,13 @@
1091210985 =/ result=(unit itype) (template-apply u.ask ~[[%var 0]])
1091310986 ?~ result [%| 'request ask needs unsupported inference']
1091410987 =/ callback=itype [%fn reply-sample.u.parts [%var 0]]
10915− =/ scheme=ischeme [[%fn callback u.result] ~[0]]
10916− =/ mark=iapi-mark-type i.marks.support
10988+ =/ sample=itype
10989+ ?^ fold.u.parts [%cell callback u.fold.u.parts]
10990+ ?~ parameters.u.parts callback
10991+ [%cell typ.i.parameters.u.parts callback]
10992+ =/ scheme=ischeme [[%fn sample u.result] ~[0]]
10993+ =/ exports=imold-types
10994+ (turn marks.support |=(m=iapi-mark-type [name.m [typ.m ~]]))
1091710995 =/ prelude=iprelude prepared.ev
1091810996 =/ public=ifile iface.prelude
1091910997 ?~ source.public [%| 'request prelude source needs unsupported inference']
@@ -10923,7 +11001,7 @@
1092311001 ?~ source.i.private [%| 'request internal source needs unsupported inference']
1092411002 =/ req=irequest-evidence
1092511003 [file name.path.p p src u.source.public u.source.i.private values.prelude molds.prelude externals marks]
10926− =/ interface=ifile [~[[name.path.p scheme]] ~[[name.mark [typ.mark ~]]] file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
11004+ =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
1092711005 [%& [support u.parts interface]]
1092811006::
1092911007++ api-mark-exports
@@ -10971,6 +11049,132 @@
1097111049 =/ sc=ischeme [[%fn u.mark typ.u.poke] ~]
1097211050 `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]] ~ ~ ~ ~]
1097311051::
11052+:: Source-proven ordinary helpers validate each selected /sur dependency.
11053+:: Unused or less direct cores remain unsupported by this first interface.
11054+++ api-sur-covered
11055+ |= [surs=(list term) defs=(list def) externals=iexternals all=(list term)]
11056+ ^- ?
11057+ ?~ surs &
11058+ =/ found=(list def)
11059+ %+ skim defs
11060+ |= d=def
11061+ ?. ?=(%mold -.d) |
11062+ ?. ?=(%ref -.shape.d) |
11063+ ?. ?=([@ [@ ~]] names.shape.d) |
11064+ =(i.t.names.shape.d i.surs)
11065+ ?~ found |
11066+ =/ selected=def i.found
11067+ ?. ?=(%mold -.selected) |
11068+ =/ sh=shape shape.selected
11069+ ?. ?=(%ref -.sh) |
11070+ ?. ?=([@ [@ ~]] names.sh) |
11071+ =/ checked=(unit itype) (find-imported-mold i.surs i.names.sh externals all)
11072+ ?~ checked |
11073+ $(surs t.surs)
11074+::
11075++$ imulti-request-gates [values=ienv requests=(list irequest-evidence)]
11076+++ api-request-gates
11077+ |= [paths=(list iapi-path-typed) ev=iapi-path-evidence ask=ischeme file=path src=@t public=@t internal=@t externals=iexternals marks=imark-externals fuel=@ud]
11078+ ^- (unit imulti-request-gates)
11079+ ?~ paths `[~ ~]
11080+ ?: =(0 fuel) ~
11081+ =/ p=iapi-path-typed i.paths
11082+ =/ parts=(unit iapi-request-parts) (api-request-parts `ev name.path.p)
11083+ ?~ parts ~
11084+ ?. ?=(?(~ [* ~]) parameters.u.parts) ~
11085+ ?: &(?=(^ fold.u.parts) ?=(^ parameters.u.parts)) ~
11086+ ?^ scry.path.p ~
11087+ ?^ (itype-vars reply-sample.u.parts) ~
11088+ ?: (itype-has-tag reply-sample.u.parts) ~
11089+ =/ open-fold=?
11090+ ?~ fold.u.parts |
11091+ |(?=(^ (itype-vars u.fold.u.parts)) (itype-has-tag u.fold.u.parts))
11092+ ?: open-fold ~
11093+ =/ result=(unit itype) (template-apply ask ~[[%var 0]])
11094+ ?~ result ~
11095+ =/ callback=itype [%fn reply-sample.u.parts [%var 0]]
11096+ =/ sample=itype
11097+ ?^ fold.u.parts [%cell callback u.fold.u.parts]
11098+ ?~ parameters.u.parts callback
11099+ [%cell typ.i.parameters.u.parts callback]
11100+ =/ scheme=ischeme [[%fn sample u.result] ~[0]]
11101+ =/ prep=iprelude prepared.ev
11102+ =/ req=irequest-evidence
11103+ [file name.path.p p src public internal values.prep molds.prep externals marks]
11104+ =/ rest=(unit imulti-request-gates)
11105+ $(paths t.paths, fuel (dec fuel))
11106+ ?~ rest ~
11107+ `[[[name.path.p scheme] values.u.rest] [req requests.u.rest]]
11108+::
11109+++ api-poke-from-checked
11110+ |= [file=path mod=module marks=imark-externals values=(list term) molds=(list term) prelude=(unit ifile)]
11111+ ^- (unit [values=ienv derived=(list iderived)])
11112+ =/ pokes=(list def)
11113+ (skim defs.mod |=(d=def &(?=(%mold -.d) =(%poke name.d))))
11114+ ?~ pokes `[~ ~]
11115+ ?. ?=([* ~] pokes) ~
11116+ =/ declared=(list term) (collect-mark-imports imports.mod)
11117+ =/ ns=(unit (list term)) (api-poke-mark-names pokes declared)
11118+ ?~ ns ~
11119+ ?. ?=([@ ~] u.ns) ~
11120+ =/ matching=(list import)
11121+ %+ skim imports.mod
11122+ |= i=import
11123+ ?. ?=(%mark -.i) |
11124+ =(mark.i i.u.ns)
11125+ ?. ?=([* ~] matching) ~
11126+ =/ checked=(unit ifile)
11127+ (api-poke-interface file mod(defs pokes, imports matching) marks values molds prelude)
11128+ ?~ checked ~
11129+ `[values.u.checked derived.u.checked]
11130+::
11131+:: The partial interface is published atomically: all paths, ordinary
11132+:: source definitions, declared marks and the poke must check. Unselected
11133+:: /sur bindings, runtime validation and value watchability remain unproved.
11134+++ multi-request-interface-graph
11135+ |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle active=(list path) cache=jcache prepared=(unit iprelude)]
11136+ ^- (each [iface=ifile cache=jcache] @t)
11137+ =/ out (api-support-analysis-graph file src externals marks modules active cache prepared)
11138+ ?: ?=(%| -.out) [%| p.out]
11139+ =/ support=iapi-support-evidence p.out
11140+ =/ ev=iapi-path-evidence paths.support
11141+ =/ parsed (parse file src)
11142+ ?: ?=(%| -.parsed) [%| 'request source does not parse']
11143+ =/ mod=module p.parsed
11144+ ?. (levy imports.mod |=(i=import ?=(?(%mark %sur) -.i)))
11145+ [%| 'request imports need unsupported inference']
11146+ =/ surs=(list term) (collect-sur-imports imports.mod)
11147+ ?. (api-sur-covered surs defs.mod externals surs)
11148+ [%| 'API source dependency needs unsupported inference']
11149+ ?~ paths.ev [%| 'request count needs unsupported inference']
11150+ =/ ask=(unit ischeme) (request-compatible-ask prepared.ev)
11151+ ?~ ask [%| 'request ask needs unsupported inference']
11152+ =/ prep=iprelude prepared.ev
11153+ =/ public=ifile iface.prep
11154+ ?~ source.public [%| 'request prelude source needs unsupported inference']
11155+ =/ private=(list iwidth-dependency)
11156+ (skim dependencies.public |=(d=iwidth-dependency =(at.d /lib/jibb/internal/jibb)))
11157+ ?. ?=([* ~] private) [%| 'request internal source needs unsupported inference']
11158+ ?~ source.i.private [%| 'request internal source needs unsupported inference']
11159+ =/ gates=(unit imulti-request-gates)
11160+ (api-request-gates paths.ev ev u.ask file src u.source.public u.source.i.private externals marks 256)
11161+ ?~ gates [%| 'request paths need unsupported inference']
11162+ =/ poke=(unit [values=ienv derived=(list iderived)])
11163+ (api-poke-from-checked file mod marks values.prep molds.prep `public)
11164+ ?~ poke [%| 'API poke needs unsupported inference']
11165+ =/ mark-molds=imold-types
11166+ (turn marks.support |=(m=iapi-mark-type [name.m [typ.m ~]]))
11167+ =/ exports=imold-types (weld mark-molds molds.support)
11168+ =/ names=(list term) (turn exports |=(m=[name=term template=ischeme] name.m))
11169+ ?. (levy names |=(n=term (unique-value-name n names)))
11170+ [%| 'API exported molds need unsupported inference']
11171+ =/ env=ienv (weld values.u.gates (weld values.u.poke values.support))
11172+ =/ graph=irequest-graph
11173+ [(silt `(list path)`~[file]) requests.u.gates modules `public values.prep molds.prep externals marks]
11174+ =/ iface=ifile
11175+ [env exports file derived.u.poke elaborations.support ~ `src `graph]
11176+ [%& [iface dependencies.ev]]
11177+::
1097411178++ infer-jibb-file
1097511179 |= [at=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
1097611180 ^- jfile-result
@@ -10986,11 +11190,21 @@
1098611190 [%& [checked [[at checked] cache]]]
1098711191 ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
1098811192 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
10989− =/ request=(each ione-request-interface @t)
10990− (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
10991− ?: ?=(%| -.request) [%| (crip "API module needs unsupported inference: {(spud at)}")]
10992− =/ checked=ifile iface.p.request
10993− [%& [checked [[at checked] dependencies.paths.support.p.request]]]
11193+ =/ narrow=?
11194+ ?. ?=([[%mark *] ~] imports.mod) |
11195+ ?. ?=([[%mold *] ~] defs.mod) |
11196+ ?. =(%paths name.i.defs.mod) |
11197+ !?=(%union -.shape.i.defs.mod)
11198+ ?: narrow
11199+ =/ request=(each ione-request-interface @t)
11200+ (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
11201+ ?: ?=(%| -.request) [%| (crip "API module needs unsupported inference: {(spud at)}")]
11202+ =/ checked=ifile iface.p.request
11203+ [%& [checked [[at checked] dependencies.paths.support.p.request]]]
11204+ =/ multi=(each [iface=ifile cache=jcache] @t)
11205+ (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
11206+ ?: ?=(%| -.multi) [%| (crip "API module needs unsupported inference: {(spud at)}")]
11207+ [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
1099411208 ?. (module-scope-valid mod prelude-values prelude-molds)
1099511209 ?: (pending-declared-poke at mod prelude-values prelude-molds)
1099611210 [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]