If frame level is provided as value, it is confused:
<code><pre style="padding-left:10">
% proc test {} { puts pr:[info frame [info frame]]; namespace eval ::test {puts ns:[info frame [info frame]]} }; test
  pr:type proc line 1 cmd {info frame [info frame]} proc ::test level 0
  ns:type <b style="color:red">proc</b> line 1 cmd {info frame [info frame]} level 0

totally unexpected type (red marked), imho - should not type be something like "eval" or "namespace" in the second case?

If one gives the 0 (so as current frame level), it works correct:
<code><pre style="padding-left:10">
% proc test {} { puts pr:[info frame 0]; namespace eval ::test {puts ns:[info frame 0]} }; test
  pr:type proc line 1 cmd {info frame 0} proc ::test level 0
  ns:type <b style="color:green">eval</b> line 1 cmd {info frame 0} level 0


But still worse, the things change also in this case if something else is involved around `info frame` additionally.<br/>
So adding a `dict get ... type` around confuses it again:
<code><pre style="padding-left:10">
% proc test {} { puts pr:[dict get [info frame 0] type]; namespace eval ::test {puts ns:[dict get [info frame 0] type]} }; test
  pr:proc
  ns:<b style="color:red">proc</b>

As well as just usage of set, so set to variable (despite it is compiled in NS) causes completely wrong type recognition:
<pre style="padding-left:10">
% proc test {} { namespace eval ::test {puts ns:[info frame 0]} }; test
  ns:type <b style="color:green">eval</b> line 1 cmd {info frame 0} level 0
% proc test {} { namespace eval ::test {puts ns:[set f [info frame 0]]} }; test
  ns:type <b style="color:red">proc</b> line 1 cmd {info frame 0} level 0
</pre>

So it looks like `info frame` is totally unusable at the moment (or at least pointing at the wrong frame, if one wants to retrieve the type of the scope).