<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: AI programming - misleading log ... in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/AI-scripting-misleading-log/m-p/929994#M108698</link>
    <description>&lt;P&gt;JMP is designed this way. I also wish it was different. The parts of the design that make this happen are (1) objects ignore messages they don't understand and (2) messages can be chained. Many releases ago JMP added a preference to make some objects report unrecognized messages. Whether it works depends on the object; I think the display boxes all have some common code to deal with it.&lt;/P&gt;
&lt;P&gt;Chaining messages, like tb&amp;lt;&amp;lt;settext("hi")&amp;lt;&amp;lt;setcolor("red") is also allowed. The result of each &amp;lt;&amp;lt; operator is the left side object. That means you can't get a grandparent with tb&amp;lt;&amp;lt;parent&amp;lt;&amp;lt;parent; you have to use (tb&amp;lt;&amp;lt;parent)&amp;lt;&amp;lt;parent.&lt;/P&gt;
&lt;P&gt;By those rules, line 2 of your example does what it is supposed to.&lt;/P&gt;
&lt;P&gt;I think the &lt;EM&gt;silently ignore unrecognized messages&lt;/EM&gt; probably originated from studying the MS-windows message handling (previous century); there are an incredible number of messages that are silently ignored (like &lt;EM&gt;the mouse is moving over you&lt;/EM&gt;, but you have no intention of ever responding to the mouse.) In JMP it could be used like this: { textBox, outlineBox } &amp;lt;&amp;lt; setcolor("red") &amp;lt;&amp;lt; close(1); where any box in the list that understands &amp;lt;&amp;lt;setcolor or &amp;lt;&amp;lt;close does the operation.&lt;/P&gt;
&lt;P&gt;The difference between the two messages your examples sends to the data table is &lt;EM&gt;kdtable()&lt;/EM&gt; is a global platform-like function while &lt;EM&gt;&amp;lt;&amp;lt;kNearestRows&lt;/EM&gt; is a message that is only known to a kdtable object. The datatable itself likes to see messages that look like platform launches, &lt;EM&gt;dt&amp;lt;&amp;lt;distribution(...)&lt;/EM&gt; for example. There is a bug here. I suspect kdtable is at fault for not reporting an issue with the "hello" argument, and the data table may think a platform was launched. Maybe the empty platform (sorry, there is no such thing.)&lt;/P&gt;
&lt;PRE&gt;kdtable("hello")
/*:

Empty()&lt;/PRE&gt;</description>
    <pubDate>Tue, 10 Feb 2026 03:15:26 GMT</pubDate>
    <dc:creator>Craige_Hales</dc:creator>
    <dc:date>2026-02-10T03:15:26Z</dc:date>
    <item>
      <title>AI scripting - misleading log ...</title>
      <link>https://community.jmp.com/t5/Discussions/AI-scripting-misleading-log/m-p/929962#M108694</link>
      <description>&lt;P&gt;I just analyzed a code created by a less favorite AI:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;dt = Open("$SAMPLE_DATA/Big Class.jmp");
kd = dt &amp;lt;&amp;lt; KDTable("hello");
result = kd &amp;lt;&amp;lt; K Nearest Rows(1, 3);&lt;BR /&gt;print("finished");&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;The log said:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;
&lt;PRE&gt;Object 'Data Table' does not recognize the message 'K Nearest Rows'; perhaps you mean one of these:  &amp;lt;&amp;lt;Insert Rows &amp;lt;&amp;lt;Delete Rows &amp;lt;&amp;lt;Select Rows &amp;lt;&amp;lt;Select All Rows &amp;lt;&amp;lt;Get Labeled Rows &amp;lt;&amp;lt;Get Hidden Rows &amp;lt;&amp;lt;Get Excluded Rows &amp;lt;&amp;lt;Clear Cell Colors &amp;lt;&amp;lt;Make Indicator Columns... &amp;lt;&amp;lt;Get as Matrix &amp;lt;&amp;lt;Get As Report &amp;lt;&amp;lt;Get Row States &amp;lt;&amp;lt;Get Rows Where &amp;lt;&amp;lt;Get Selected Rows &amp;lt;&amp;lt;Clear Edit Lock &amp;lt;&amp;lt;Make SAS DATA Step &amp;lt;&amp;lt;Make SAS DATA Step Window &amp;lt;&amp;lt;New Data View &amp;lt;&amp;lt;New Data Box &amp;lt;&amp;lt;Markers &amp;lt;&amp;lt;Go to Row… &amp;lt;&amp;lt;Invert Row Selection &amp;lt;&amp;lt;Select Duplicate Rows &amp;lt;&amp;lt;Clear Row States &amp;lt;&amp;lt;Clear Selected Row States &amp;lt;&amp;lt;Add Rows… &amp;lt;&amp;lt;Get Rows &amp;lt;&amp;lt;Move Rows… &amp;lt;&amp;lt;Clear Sel&lt;/PRE&gt;
&lt;PRE&gt;finished &lt;/PRE&gt;
&lt;P&gt;Sure: if a scriptable object doesn't understand a message, it shows such a warning message in the log.&lt;BR /&gt;And a Data Table doesn't understand the the message &lt;FONT face="courier new,courier"&gt;K nearest Rows().&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;But wait, why is &lt;FONT face="courier new,courier"&gt;kd&lt;/FONT&gt; a data table?!&lt;BR /&gt;This is easy to answer: In the previous line of code, the data table doesn't understand the command&amp;nbsp;&lt;CODE class=" language-jsl"&gt;&amp;lt;&amp;lt; KDTable("hello");&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;And therefore, instead of returning a KD table, it returns a reference to itself.&lt;BR /&gt;Unfortunately, here is NO warning message:&lt;/P&gt;
&lt;PRE&gt;Object 'Data Table' does not recognize the message 'KD Table("hello")'&lt;/PRE&gt;
&lt;BR /&gt;
&lt;P&gt;A JSL scripter will spot the error within seconds :&amp;nbsp; &lt;FONT face="courier new,courier"&gt;KD Table("hello")&lt;/FONT&gt; , tztztz!&lt;BR /&gt;But you’d probably agree—it’s hard to find the error from the information JMP provides!&lt;/P&gt;
&lt;P&gt;How to escape this issue?&amp;nbsp; Is there a general rule or trick?&lt;BR /&gt;Can JMP / the JSL interpreter be improved to help AI and the users understand the errors?&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;Users with paranoia could add&amp;nbsp;&amp;nbsp;&lt;FONT face="courier new,courier"&gt;If (type(name Expr(returned object) == ...)&lt;/FONT&gt; after every message sent to a scriptable object. Hm ...&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Wed, 11 Feb 2026 12:05:26 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/AI-scripting-misleading-log/m-p/929962#M108694</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2026-02-11T12:05:26Z</dc:date>
    </item>
    <item>
      <title>Re: AI programming - misleading log ...</title>
      <link>https://community.jmp.com/t5/Discussions/AI-scripting-misleading-log/m-p/929994#M108698</link>
      <description>&lt;P&gt;JMP is designed this way. I also wish it was different. The parts of the design that make this happen are (1) objects ignore messages they don't understand and (2) messages can be chained. Many releases ago JMP added a preference to make some objects report unrecognized messages. Whether it works depends on the object; I think the display boxes all have some common code to deal with it.&lt;/P&gt;
&lt;P&gt;Chaining messages, like tb&amp;lt;&amp;lt;settext("hi")&amp;lt;&amp;lt;setcolor("red") is also allowed. The result of each &amp;lt;&amp;lt; operator is the left side object. That means you can't get a grandparent with tb&amp;lt;&amp;lt;parent&amp;lt;&amp;lt;parent; you have to use (tb&amp;lt;&amp;lt;parent)&amp;lt;&amp;lt;parent.&lt;/P&gt;
&lt;P&gt;By those rules, line 2 of your example does what it is supposed to.&lt;/P&gt;
&lt;P&gt;I think the &lt;EM&gt;silently ignore unrecognized messages&lt;/EM&gt; probably originated from studying the MS-windows message handling (previous century); there are an incredible number of messages that are silently ignored (like &lt;EM&gt;the mouse is moving over you&lt;/EM&gt;, but you have no intention of ever responding to the mouse.) In JMP it could be used like this: { textBox, outlineBox } &amp;lt;&amp;lt; setcolor("red") &amp;lt;&amp;lt; close(1); where any box in the list that understands &amp;lt;&amp;lt;setcolor or &amp;lt;&amp;lt;close does the operation.&lt;/P&gt;
&lt;P&gt;The difference between the two messages your examples sends to the data table is &lt;EM&gt;kdtable()&lt;/EM&gt; is a global platform-like function while &lt;EM&gt;&amp;lt;&amp;lt;kNearestRows&lt;/EM&gt; is a message that is only known to a kdtable object. The datatable itself likes to see messages that look like platform launches, &lt;EM&gt;dt&amp;lt;&amp;lt;distribution(...)&lt;/EM&gt; for example. There is a bug here. I suspect kdtable is at fault for not reporting an issue with the "hello" argument, and the data table may think a platform was launched. Maybe the empty platform (sorry, there is no such thing.)&lt;/P&gt;
&lt;PRE&gt;kdtable("hello")
/*:

Empty()&lt;/PRE&gt;</description>
      <pubDate>Tue, 10 Feb 2026 03:15:26 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/AI-scripting-misleading-log/m-p/929994#M108698</guid>
      <dc:creator>Craige_Hales</dc:creator>
      <dc:date>2026-02-10T03:15:26Z</dc:date>
    </item>
    <item>
      <title>Re: AI programming - misleading log ...</title>
      <link>https://community.jmp.com/t5/Discussions/AI-scripting-misleading-log/m-p/930016#M108699</link>
      <description>&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Hi&amp;nbsp;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/982"&gt;@Craige_Hales&lt;/a&gt;&amp;nbsp;,&amp;nbsp;thanks a lot for the detailed background – Sure, I can understand &lt;EM&gt;why&lt;/EM&gt; JSL was designed this way back then (silent ignore of unknown messages + chaining returning the left‑hand object).&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;However, I also hope that the JSL developers see that this pattern has become somewhat “incompatible” with today’s AI‑assisted &lt;EM&gt;vibe coding&lt;/EM&gt;:&lt;BR /&gt;&lt;STRONG&gt;LLMs happily invent messages&lt;/STRONG&gt;, platform calls and arguments, and with the current behavior they often just get silently ignored. That doesn’t only confuse, it can also turn debugging into pure hell – you end up hunting the symptom instead of the root cause.&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Maybe, developers can provide a&amp;nbsp;JSL‑level switch for&amp;nbsp;&lt;STRONG&gt;“AI debug / chatty mode”&lt;/STRONG&gt;&amp;nbsp;:&lt;/DIV&gt;
&lt;DIV class="___1ta0mgc f10pi13n ft6029x"&gt;
&lt;DIV class="___1hewfwb f10pi13n f7oukh6 f5p0z4x" tabindex="0" role="group" aria-label="Codevorschau"&gt;
&lt;DIV class="fui-FluentProvider codeBlock-393fui-FluentProviderr2f ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2" dir="ltr" data-testid="ComponentFluentProviderId"&gt;
&lt;DIV class="scriptor-component-code-block ___xfooyp0 fbwmw8f f1r24x2c fssjx5q f11d9hfk f1tydgd1 f6k94f1 f1q00127 f1wu8emz fukujjm f1uhbleq f1j8h10f f1dcxf0u fhswmqe f1gsf85u fh8rik3 f1jl54mw f1w257bn f1c6ju7g fwfsotv f1ndaetk fe9qgns fu1i9vr fol4l6z f1xiw7p5 fdk4ulh" tabindex="-1"&gt;
&lt;DIV class="___18mzkmt f1tmrb6z f1jgja9q fqk7d3 f1lfwv9l fn52e0m flhg5o7 f1r24x2c f1rpk5b3 f1hk2bam f1q00127 f1wu8emz f1g5dvvh"&gt;
&lt;DIV class="fui-Overflow ___cvoqnq0 f3x039c facid5 fssjx5q f13efqb7 ffmgqju f1npw1rw fiox0mu"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;chatty mode();&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;to deliberately turn on &lt;EM&gt;noisy, but incredibly helpful&lt;/EM&gt; diagnostics for selected object classes (e.g. display objects, platforms, general scriptable objects).&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;The idea is that when the end result looks weird, you enable this mode and JMP starts complaining exactly where things first go off the rails, instead of failing quietly and only shouting much later. I’ve put this into a Wish List item here for voting:&lt;LI-MESSAGE title="chatty mode() for AI debugging" uid="930004" url="https://community.jmp.com/t5/JMP-Wish-List/chatty-mode-for-AI-debugging/m-p/930004#U930004" discussion_style_icon_css="lia-mention-container-editor-message lia-img-icon-idea-thread lia-fa-icon lia-fa-idea lia-fa-thread lia-fa"&gt;&lt;/LI-MESSAGE&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Thanks again for the insights and for confirming that this is an area where behavior could be improved.&lt;/DIV&gt;</description>
      <pubDate>Tue, 10 Feb 2026 06:27:49 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/AI-scripting-misleading-log/m-p/930016#M108699</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2026-02-10T06:27:49Z</dc:date>
    </item>
  </channel>
</rss>

