<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: siva surya</title>
    <description>The latest articles on DEV Community by siva surya (@siva_surya_f555745c8bbca8).</description>
    <link>https://dev.to/siva_surya_f555745c8bbca8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4232384%2Fa09ad056-9ef5-4a8f-a083-675c5a8c8c56.jpg</url>
      <title>DEV Community: siva surya</title>
      <link>https://dev.to/siva_surya_f555745c8bbca8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/siva_surya_f555745c8bbca8"/>
    <language>en</language>
    <item>
      <title>The nurse and doctor sent the same message. Only one changed the chart.</title>
      <dc:creator>siva surya</dc:creator>
      <pubDate>Sat, 07 Nov 2026 16:36:51 +0000</pubDate>
      <link>https://dev.to/siva_surya_f555745c8bbca8/the-nurse-and-doctor-sent-the-same-message-only-one-changed-the-chart-3ad0</link>
      <guid>https://dev.to/siva_surya_f555745c8bbca8/the-nurse-and-doctor-sent-the-same-message-only-one-changed-the-chart-3ad0</guid>
      <description>&lt;p&gt;Lantern is an AI care team built on Switch: agents working alongside nurses, a doctor and room service across nine rooms of one hospital ward. Two agents have run on Switch so far, and two more run as code. Built for the Flip the Switch hackathon.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/QR7r84tyBlo" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What you're watching.&lt;/strong&gt; The agents in this video are rule-based stand-ins, labelled on screen. The real Switch path, with &lt;code&gt;intake&lt;/code&gt; and &lt;code&gt;care-coordinator&lt;/code&gt; running as Switch agents, passed this same case three runs in a row on Nov 4. The record service, checks and refusals in the video are real. Exactly what is real, below.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nurse Ana typed the correct order. The right patient, the right change, the right reason, even the doctor's explanation, word for word.&lt;/p&gt;

&lt;p&gt;Lantern refused her.&lt;/p&gt;

&lt;p&gt;Moments later Dr. Lee typed the same words, character for character. The chart moved from version 3 to version 4, and the patient got an answer.&lt;/p&gt;

&lt;p&gt;That is not a bug. It is the entire idea.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2v0xhps5g5iywg75vhs0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2v0xhps5g5iywg75vhs0.png" alt="Same words. Only one counts." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Fictional patients, a simulated chart, human roles played by our team.&lt;/strong&gt; Lantern is a hackathon prototype for Flip the Switch. It is not a clinical system and gives no medical advice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/sivasuryachandran/Lantern" rel="noopener noreferrer"&gt;Read the code&lt;/a&gt;&lt;/strong&gt; · By Siva Surya Chandran&lt;/p&gt;

&lt;h2&gt;
  
  
  The most dangerous sentence on a ward
&lt;/h2&gt;

&lt;p&gt;It is 6:40 in the morning. Ana's shift ends at seven. A patient has just told her bedside tablet:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can't wait for breakfast. Dr. Lee said it's fine now that my procedure moved."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Her chart says &lt;strong&gt;NPO&lt;/strong&gt;: nothing by mouth.&lt;/p&gt;

&lt;p&gt;Nobody here did anything wrong. A doctor said something reasonable, the chart has not caught up, and in twenty minutes a different nurse takes over. The patient may be right. The chart may be right. And the next person to walk in will not know there was ever a question.&lt;/p&gt;

&lt;p&gt;The Joint Commission defines a hand-off as &lt;em&gt;"a transfer and acceptance of patient care responsibility achieved through effective communication"&lt;/em&gt; (&lt;a href="https://psnet.ahrq.gov/issue/inadequate-hand-communication" rel="noopener noreferrer"&gt;AHRQ PSNet summary&lt;/a&gt;). Read that again and stop at &lt;strong&gt;acceptance&lt;/strong&gt;. Sending a message is not transferring a responsibility. Its alert on hand-offs lists wrong-site surgery, treatment delays, falls and medication errors among reported adverse events, and cites a 2016 study estimating that communication failures played a part in about 30% of malpractice claims (&lt;a href="https://jointcommission.org/-/media/tjc/documents/resources/patient-safety-topics/sentinel-event/sea_58_hand_off_comms_9_6_17_final_(1).pdf" rel="noopener noreferrer"&gt;Sentinel Event Alert 58, PDF&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The world does not need another AI that writes things down. We built for the moment &lt;em&gt;after&lt;/em&gt;: when the words and the record disagree, and somebody has to notice, the right person has to decide, and the next shift has to know who owns what's left.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What was said. What was confirmed. Who owns what's next.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  We kept AI out of the room that matters most
&lt;/h2&gt;

&lt;p&gt;Lantern is a ward built on &lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;Switch&lt;/a&gt;: nine private rooms where people and AI teammates share one history. The most important design decision we made was not a prompt. It was a membership list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3yis2s4fq8ohgvarvpd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3yis2s4fq8ohgvarvpd2.png" alt="Nine channels. One shared shift record." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Who&lt;/th&gt;
&lt;th&gt;Their job&lt;/th&gt;
&lt;th&gt;What they can never do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;intake&lt;/strong&gt; (agent)&lt;/td&gt;
&lt;td&gt;Spots a possible mismatch and quotes the patient exactly&lt;/td&gt;
&lt;td&gt;Diagnose, or enter a patient room&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;care-coordinator&lt;/strong&gt; (agent)&lt;/td&gt;
&lt;td&gt;Carries the case to the doctor with cited chart facts, briefs the next nurse&lt;/td&gt;
&lt;td&gt;Recommend a decision or change an order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;interpreter&lt;/strong&gt;, &lt;strong&gt;scribe&lt;/strong&gt; (agents)&lt;/td&gt;
&lt;td&gt;Translate both ways, file dictated notes&lt;/td&gt;
&lt;td&gt;Turn a translation or a note into an order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;record-bot&lt;/strong&gt; (plain code)&lt;/td&gt;
&lt;td&gt;Opens cases, checks every claim, posts the ✓&lt;/td&gt;
&lt;td&gt;Improvise. It has no model in it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nurses&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Confirm, record medicines, hand off, accept&lt;/td&gt;
&lt;td&gt;Change an order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dr. Lee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Decides&lt;/td&gt;
&lt;td&gt;Decide outside the case thread&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Room service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Close tray and turnover tasks&lt;/td&gt;
&lt;td&gt;Touch the chart&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The AI in this hospital is not allowed to say "resolved". Only the record service can. Agents notice and carry. People decide. Code enforces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 17, step by step
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The bedside.&lt;/strong&gt; Patient 101's remark lands in her room. record-bot forwards it to &lt;code&gt;nurse-station&lt;/code&gt;, keeping the original post id.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The agent notices, and the code checks the agent.&lt;/strong&gt; intake posts a &lt;em&gt;possible&lt;/em&gt; discrepancy against &lt;code&gt;ord-diet-1 · NPO · v3&lt;/code&gt;. If its quote is not an exact substring of what she really wrote, the service throws the card away. An agent cannot put words in a patient's mouth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. A person clarifies.&lt;/strong&gt; Case 17 opens. Only now does the patient get a fixed message that the team is checking. Ana replies &lt;code&gt;CONFIRM Case 17&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Evidence, with receipts.&lt;/strong&gt; record-bot opens the case in &lt;code&gt;doctor-review&lt;/code&gt; and @mentions care-coordinator, which pulls chart facts through a logged lookup tool and cites each one. Then it says the sentence we are proudest of: &lt;em&gt;"I am not recommending a decision."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhkly8g4hxtqgesequhg9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhkly8g4hxtqgesequhg9.png" alt="A receipt proves the source, not the decision." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here it is in the room. Note Ana's &lt;code&gt;DECIDE&lt;/code&gt; at the bottom of the thread, which changes nothing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4m6kk563frctw2i0hd2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4m6kk563frctw2i0hd2y.png" alt="doctor-review in the recorded run: the coordinator's cited summary, the verified receipts, and the nurse's refused DECIDE" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. The refusal.&lt;/strong&gt; Ana's &lt;code&gt;DECIDE&lt;/code&gt; fails the first check. There is no argument to win, no prompt to jailbreak, nothing to persuade. The chart stays at v3 and the refusal goes on the audit log.&lt;/p&gt;

&lt;p&gt;Here is the check itself, trimmed from &lt;a href="https://github.com/sivasuryachandran/Lantern/blob/main/lantern/service.py" rel="noopener noreferrer"&gt;&lt;code&gt;lantern/service.py&lt;/code&gt;&lt;/a&gt;. Edited posts and other rooms are filtered out before it runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;refuse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_audit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DECIDE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rejected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tell&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doctor_root&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_say&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;decrej:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DOCTOR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DECIDE ignored: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doctor_root&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doctor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;refuse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;only a verified doctor can decide&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doctor_root&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;root_id&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doctor_root&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;refuse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;must be a reply in that case&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s doctor thread&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;state&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;CONFIRMED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;refuse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;case is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;state&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, not CONFIRMED_CONFLICT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;chart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;patient_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chart_version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;refuse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stale chart version v&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;; current is v&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chart_version&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Re-review and resubmit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No model runs anywhere in that path. Note &lt;code&gt;tell=False&lt;/code&gt;: a nurse's refusal goes to the audit log with no reply in chat, which is why the screenshot above shows her post and no answer. The dashboard's "refused by code" count and Command audit are where it shows up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy416s4qathrajbcnhv85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy416s4qathrajbcnhv85.png" alt="Six checks between a message and the chart." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Advice is not a decision.&lt;/strong&gt; Dr. Lee says: &lt;em&gt;"She can have a regular diet today, her procedure moved to Thursday."&lt;/em&gt; Lantern files that as &lt;code&gt;ADVICE&lt;/code&gt;, offers a draft &lt;code&gt;DECIDE&lt;/code&gt;, and changes nothing. A sentence said out loud does not become an order until she sends it herself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. The chart moves.&lt;/strong&gt; Her &lt;code&gt;DECIDE&lt;/code&gt; passes all six checks. v3 becomes v4, and Patient 101 receives Dr. Lee's own words, attributed, never an AI's paraphrase.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F73al8m4h8886d0cl8f1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F73al8m4h8886d0cl8f1q.png" alt="Mission control: Patient 101 now at chart version 4" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One decision, and the whole ward moves
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The kitchen hears about it.&lt;/strong&gt; The diet change opens a tray task in &lt;code&gt;room-service&lt;/code&gt;. Ana tries &lt;code&gt;DONE&lt;/code&gt;: refused. Sam posts &lt;code&gt;DONE T-101-D17&lt;/code&gt;: closed, with his name on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The language barrier gets a witness.&lt;/strong&gt; Patient 103 writes &lt;em&gt;"El fisioterapeuta dijo que puedo sentarme en la silla para el almuerzo."&lt;/em&gt; The nurse sees the English beside the original, and the doctor's answer returns in Spanish, labelled as a translation, under the doctor's original words. It can be read aloud. It can never change an order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two entries for one medicine get flagged, not hidden.&lt;/strong&gt; Acetaminophen recorded at 08:00 and again at 12:10 raises a possible double entry. Both stay visible. &lt;code&gt;GIVEN&lt;/code&gt; is a record of what a nurse says happened; it never rewrites an order, and Lantern does not judge the dose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A curious patient hits a wall.&lt;/strong&gt; Patient 102 asks about Case 17 and is told Lantern only shares updates about their own care. Their account gets a 403 on the other room.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mission control watches everything and can change nothing.&lt;/strong&gt; Fourteen read-only panels: patients, cases, evidence, chart versions, medicines, room tasks, translations, reminders, tracking and the command audit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvsqngl667w2dijqdh745.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvsqngl667w2dijqdh745.png" alt="Dashboard panels: medicines, room turnover, tasks, translations, reminders, tracking and command audit" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Seven o'clock: where hospitals lose things
&lt;/h2&gt;

&lt;p&gt;Ana posts &lt;code&gt;HANDOFF&lt;/code&gt;. The coordinator briefs Ben on what's open. And then, nothing happens. The case still belongs to Ana, because Ben hasn't said so.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvt0tzjacv0sl4i0a0z20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvt0tzjacv0sl4i0a0z20.png" alt="A handoff is not a handoff until someone says accept." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One word from Ben, and the owner changes on the record.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fytl1sdrp0nt4cyskevvj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fytl1sdrp0nt4cyskevvj.png" alt="nurse-station in the recorded run: HANDOFF, the brief, ACCEPT, and the owner change" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is real in the demo
&lt;/h2&gt;

&lt;p&gt;For demo purposes, we made rule-based stand-ins for the agents, and every frame of the video says so. It is not a live four-agent Switch run. &lt;code&gt;intake&lt;/code&gt; and &lt;code&gt;care-coordinator&lt;/code&gt; passed the full case as real agents in Switch Console, three times in a row, with refusals tested live, on Nov 4. That run was not recorded. &lt;code&gt;interpreter&lt;/code&gt; and &lt;code&gt;scribe&lt;/code&gt; have only run as code stand-ins.&lt;/p&gt;

&lt;p&gt;Every guardrail lives outside the agents, so the same rules apply whichever agents are running.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;In the video&lt;/th&gt;
&lt;th&gt;What it really is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;record-bot posts, ✓ checks, refusals, chart changes, task closes, owner changes&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Real&lt;/strong&gt;, from one run against a local Mattermost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patients, nurses, doctor, room service&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Scripted&lt;/strong&gt;, played by our team's driver&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;intake, care-coordinator, interpreter, scribe&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Stand-ins&lt;/strong&gt;, rule-based, labelled on screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wispr bubbles&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Re-enactment&lt;/strong&gt;, labelled; the commands were typed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jira board and Google Calendar&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Real items we created by hand&lt;/strong&gt; through our connectors for the demo. The dashboard's tracking rows come from a demo mapping file. Lantern's own Jira and Calendar hooks are tested against fakes only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdapou85fg534t1ftrtvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdapou85fg534t1ftrtvg.png" alt="The Lantern tasks on our test Jira board, with avatars blurred" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4h0795diuvptw5y6up8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4h0795diuvptw5y6up8g.png" alt="The Lantern follow-ups in Google Calendar, with personal details blurred" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A ward has no free hands
&lt;/h2&gt;

&lt;p&gt;Every staff command in Lantern is one short, speakable line, designed for &lt;a href="https://wisprflow.ai" rel="noopener noreferrer"&gt;Wispr Flow&lt;/a&gt;, which works in any text box with no integration code: &lt;code&gt;CONFIRM Case 17&lt;/code&gt;. &lt;code&gt;HANDOFF Case 17 open: confirm she ate without nausea&lt;/code&gt;. &lt;code&gt;REMIND Case 17 in 20 min check she ate&lt;/code&gt;. Whisper Mode fits a 7:00 handoff beside sleeping patients.&lt;/p&gt;

&lt;p&gt;And voice changes nothing about power. &lt;strong&gt;Dictation is just a faster keyboard.&lt;/strong&gt; A whispered &lt;code&gt;DECIDE&lt;/code&gt; from a nurse is refused exactly like a typed one, because Lantern checks who posted, not how the words got there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk9jfartdrhoe0qhbymen.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk9jfartdrhoe0qhbymen.png" alt="How Wispr Flow fits Lantern" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it on Switch, step by step
&lt;/h2&gt;

&lt;p&gt;This is what worked for us on Switch Console 0.40.1. Our Nov 4 run used Claude Code agents, and the steps don't depend on which coding agent you pick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Start Console and chat as a normal user.&lt;/strong&gt; Console runs a local server with Mattermost in Docker, on a port it chooses (we saw 64096), so set your &lt;code&gt;MM_URL&lt;/code&gt; to match. Switch ignores the Mattermost admin account, so if your agent seems deaf, check who you're typing as.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Put room membership in one file.&lt;/strong&gt; This is the first boundary, and it's a list, not a prompt. Our &lt;code&gt;setup_mattermost.py&lt;/code&gt; script creates the rooms from it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;rooms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;patient-101&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;patient-101&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;record-bot&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;patient-102&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;patient-102&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;record-bot&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;nurse-station&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;nurse-ana&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;nurse-ben&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;intake&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;care-coordinator&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;interpreter&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;scribe&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;record-bot&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;doctor-review&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;dr-lee&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;nurse-ana&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;care-coordinator&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;interpreter&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;scribe&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;record-bot&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Create each agent in Console and add it only to its staff rooms.&lt;/strong&gt; intake goes in &lt;code&gt;nurse-station&lt;/code&gt;. care-coordinator goes in &lt;code&gt;nurse-station&lt;/code&gt; and &lt;code&gt;doctor-review&lt;/code&gt;. Their instructions are in &lt;a href="https://github.com/sivasuryachandran/Lantern/tree/main/docs/agents" rel="noopener noreferrer"&gt;&lt;code&gt;docs/agents/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Set who can address each agent, and don't stop at "Anyone".&lt;/strong&gt; A new agent is owner-only, so our service account got &lt;em&gt;"I only take instructions from my owner, and this chat account isn't linked to a Switch user yet."&lt;/em&gt; The obvious fix is "Anyone", and it's a trap: Switch also puts agents in Mattermost's default Town Square, where our patient accounts are members and can't be removed. So we used custom rules:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Users&lt;/th&gt;
&lt;th&gt;Agents&lt;/th&gt;
&lt;th&gt;Rooms&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;intake&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nurse-station&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;care-coordinator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;nurse-station&lt;/code&gt;, &lt;code&gt;doctor-review&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;After that, &lt;code&gt;@intake&lt;/code&gt; from a patient in Town Square got: &lt;em&gt;"You're not permitted to direct messages to me in this room — my operator has restricted who can address me here."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Test the bot path, not just the human path.&lt;/strong&gt; A person's @mention waking an agent doesn't prove a service account's post will. &lt;a href="https://github.com/sivasuryachandran/Lantern/blob/main/scripts/check_intake.py" rel="noopener noreferrer"&gt;&lt;code&gt;scripts/check_intake.py&lt;/code&gt;&lt;/a&gt; posts three casual phrasings as the patient and checks that a case opens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Let your service own the threads and the ids.&lt;/strong&gt; Switch message ids (&lt;code&gt;sw_...&lt;/code&gt;) aren't Mattermost post ids, and intake put the wrong one on a card, which the check rejected. We kept the check strict and gave the agent a plain-code lookup to copy the right id from. The service starts every case thread itself, and the agent's instructions say to reply inside that same thread, because care-coordinator once answered top-level and the thread check never saw it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Expect progress posts and slow replies.&lt;/strong&gt; "Starting a session..." and "Working... 13s" are real posts. A checker that answers every agent post can loop, so ours ignores them. Replies took 15 to 70 seconds and a backlog drains after a reset, so wait for agents to go idle before you record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One thing we couldn't do:&lt;/strong&gt; register a custom agent from a script. The Agent Protocol needs a registration key, and Console 0.40.1 had no page for making one, so record-bot is a normal Mattermost account using the REST API.&lt;/p&gt;

&lt;p&gt;Take Switch away and you have a chatbot and a database. You'd lose the agents working under their own names in the staff's own threads, the case crossing from nurse to doctor in plain sight, and isolation that is a setting instead of a request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't trust us. Check.
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;98 automated tests pass, no network needed&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sivasuryachandran/Lantern/blob/marketing-assets/recordings/tests.txt" rel="noopener noreferrer"&gt;&lt;code&gt;recordings/tests.txt&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A nurse's &lt;code&gt;DECIDE&lt;/code&gt; is refused, the chart holds&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tests/test_must_pass.py&lt;/code&gt;, the dashboard's Command audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invented patient quotes are rejected&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tests/test_must_pass.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Only room service closes a tray task&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;DONE&lt;/code&gt; check in &lt;code&gt;lantern/service.py&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Every cut, speed change and insert in the video&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sivasuryachandran/Lantern/blob/marketing-assets/recordings/final/cutlist.md" rel="noopener noreferrer"&gt;&lt;code&gt;recordings/final/cutlist.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Run it yourself in under a minute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/sivasuryachandran/Lantern &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;Lantern
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; .venv/bin/pip &lt;span class="nb"&gt;install &lt;/span&gt;pyyaml
.venv/bin/python &lt;span class="nt"&gt;-m&lt;/span&gt; unittest discover &lt;span class="nt"&gt;-s&lt;/span&gt; tests   &lt;span class="c"&gt;# 98 tests&lt;/span&gt;
.venv/bin/python scripts/demo_offline.py         &lt;span class="c"&gt;# Case 17, no Mattermost needed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What this doesn't claim
&lt;/h2&gt;

&lt;p&gt;Lantern is not connected to a hospital or an EHR. Its clinical safety is unvalidated, and no nurse has reviewed it yet: we &lt;a href="https://github.com/sivasuryachandran/Lantern/blob/marketing-assets/docs/NURSE_REVIEW.md" rel="noopener noreferrer"&gt;wrote the questions&lt;/a&gt; and ran out of time. That is the first thing we'd fix, followed by a recording with the Switch agents live.&lt;/p&gt;

&lt;p&gt;One rule shaped all of it, and we would build it the same way again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The agents are allowed to be wrong, because they are not allowed to decide.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#HowISwitch #FlipTheSwitch #Switch #WisprFlow #WeMakeDevs #DevToolsAcademy&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>howiswitch</category>
      <category>switch</category>
      <category>wisprflow</category>
    </item>
  </channel>
</rss>
