<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-733074358901582680</id><updated>2026-05-16T06:14:09.969-04:00</updated><category term="HL7"/><category term="IHE"/><category term="MeaningfulUse"/><category term="HealthIT"/><category term="Rambling"/><category term="CDA"/><category term="FHIR"/><category term="ONC"/><category term="Announcements"/><category term="siframework"/><category term="CCDA"/><category term="Query Health"/><category term="Stage2"/><category term="CCD"/><category term="HQMF"/><category term="XDS"/><category term="ABBI"/><category term="HL7WGM"/><category term="HITECH"/><category term="PCC"/><category term="SANER"/><category term="Connectathon"/><category term="HITPol"/><category term="Informatics"/><category term="CDS"/><category term="EHR"/><category term="S4PM"/><category term="HITSP"/><category term="Quality"/><category term="Public Health"/><category term="Workflow"/><category term="mHealth"/><category term="HIE"/><category term="HITsm"/><category term="Templates"/><category term="BlueButton"/><category term="C32"/><category term="NWHIN"/><category term="Stage3"/><category term="HIPAA"/><category term="V2toFHIR"/><category term="ePatient"/><category term="COVID19"/><category term="LOINC"/><category term="CCDA21"/><category term="hcsm"/><category term="NHIN Direct"/><category term="Standards"/><category term="XSLT"/><category term="BPMN"/><category term="CQW"/><category term="HCIT"/><category term="HIMSS11"/><category term="Interoperability"/><category term="OAuth"/><category term="Ranting"/><category term="Regulation"/><category term="SMART"/><category term="SNOMED CT"/><category term="Vocabulary"/><category term="2S2"/><category term="HITSC"/><category term="NPRM"/><category term="PCAST"/><category term="SWBAT"/><category term="V3"/><category term="XML"/><category term="ACO"/><category term="BCFIPS"/><category term="Book Review"/><category term="DirectProject"/><category term="Health System Education"/><category term="HealthROI"/><category term="InfoWay"/><category term="QRDA"/><category term="Security"/><category term="Simplicity"/><category term="TLS"/><category term="Usability"/><category term="mu2015"/><category term="openEHR"/><category term="HAPI"/><category term="HTML5"/><category term="Labs"/><category term="NeHC"/><category term="Robin&#39;s Eggs"/><category term="TheWalkingGallery"/><category term="VMR"/><category term="XDW"/><category term="Book Fodder"/><category term="EBM"/><category term="HIMSS12"/><category term="HIT100"/><category term="ITI"/><category term="PHR"/><category term="REST"/><category term="Reconciliation"/><category term="SOAP"/><category term="TopPosts"/><category term="ANPRM"/><category term="BlueButtonPlus"/><category term="CQL"/><category term="Certification"/><category term="DAF"/><category term="EMR"/><category term="Genetics"/><category term="HIMSS13"/><category term="HealtheDecisions"/><category term="ISO"/><category term="MDHT"/><category term="NHIN"/><category term="PCD"/><category term="Relevant"/><category term="SUSHI"/><category term="TwoReams"/><category term="2015EdCert"/><category term="AI"/><category term="AdHocHarley"/><category term="BigData"/><category term="CAT15"/><category term="FDA"/><category term="HITPC"/><category term="HITstd"/><category term="HTI1"/><category term="Humor"/><category term="ICD10"/><category term="Java"/><category term="NHINDirect"/><category term="NIST"/><category term="NoBlocking"/><category term="Nursing"/><category term="OAuth2"/><category term="PatientAccess"/><category term="PrecisionMedicine"/><category term="QRPH"/><category term="Radiology"/><category term="Riyadh"/><category term="SAEAF"/><category term="SAIF"/><category term="SNI"/><category term="SVS"/><category term="Word"/><category term="XCPD"/><category term="greenCDA"/><category term="AHIC"/><category term="ASTP"/><category term="ATNA"/><category term="AllOfUs"/><category term="CAT14"/><category term="CCHIT"/><category term="CDC"/><category term="CIMI"/><category term="CMS"/><category term="CQM"/><category term="CREDS"/><category term="Cloud"/><category term="DCM"/><category term="DICOM"/><category term="FHIRPath"/><category term="GMDD"/><category term="HIMS11"/><category term="HIMSS14"/><category term="HIMSS16"/><category term="HTI2"/><category term="ICD-10-CM"/><category term="Infobutton"/><category term="InteropForum"/><category term="Irene"/><category term="JASON"/><category term="KM"/><category term="MACRA"/><category term="MHD"/><category term="NIEM"/><category term="NLP"/><category term="NQF"/><category term="NotFHIR"/><category term="ONC2012"/><category term="OpenGov"/><category term="Privacy"/><category term="Recognition"/><category term="SDOH"/><category term="SOA"/><category term="SandI"/><category term="Schema"/><category term="TEFCA"/><category term="TL;DR"/><category term="UCUM"/><category term="W3CDSI"/><category term="X12"/><category term="XQuery"/><category term="esMD"/><category term="patient-centric"/><category term="shutdown"/><category term="μ ITS"/><category term="42CFR2_NPRM"/><category term="ACDC"/><category term="ACMImimi"/><category term="AMIA2014"/><category term="API"/><category term="ARRA"/><category term="Advocate"/><category term="Agile"/><category term="Argonaut"/><category term="Attachments"/><category term="BED"/><category term="BINGO"/><category term="BlatantCommercialism"/><category term="Blockchain"/><category term="Boston Marathon"/><category term="Breaking"/><category term="Bullshit"/><category term="C83"/><category term="CAQH"/><category term="CAT13"/><category term="CCR"/><category term="CEDD"/><category term="CEHRT"/><category term="CHR"/><category term="CLIA"/><category term="CONNECT"/><category term="CORE"/><category term="COVID-19"/><category term="CSV"/><category term="Classwork"/><category term="Copilot"/><category term="Cures"/><category term="CuresNPRM"/><category term="D68"/><category term="DEX"/><category term="DSTU2"/><category term="Direct"/><category term="Duh"/><category term="ED"/><category term="EDI"/><category term="Ebola"/><category term="EmpowerHIT"/><category term="EngageWithGrace"/><category term="Europe"/><category term="EyeCare"/><category term="FAIL"/><category term="FF"/><category term="FIPS"/><category term="Foo"/><category term="FreeIP"/><category term="GDPR"/><category term="Gov20"/><category term="HCR"/><category term="HIMSS"/><category term="HIT5"/><category term="HITGender"/><category term="HITThanks"/><category term="HPD"/><category term="Hawaii"/><category term="Health IT Week"/><category term="HealthIS"/><category term="HealthIT4UBP"/><category term="HealthITWeek"/><category term="HealthInterop2030"/><category term="HealthKit"/><category term="Healthcare2.0"/><category term="I2B2"/><category term="ICD-9-CM"/><category term="IOM"/><category term="ITS"/><category term="Imaging"/><category term="IndependenceDay"/><category term="India"/><category term="Innovate"/><category term="Irma"/><category term="JSON"/><category term="JustInTime4TheHolidays"/><category term="KMForum"/><category term="LTC"/><category term="LateNightAtHIMSS"/><category term="Listening"/><category term="MDDS"/><category term="MIPS"/><category term="MU2I"/><category term="MU2S"/><category term="MUCFR170"/><category term="MeaningfulUser"/><category term="Metadata"/><category term="Microdata"/><category term="Musing"/><category term="NCPDP"/><category term="NHITWeek"/><category term="NWIN"/><category term="Net"/><category term="Neutrality"/><category term="News?"/><category term="NuMu"/><category term="OHT"/><category term="OID"/><category term="ONCchat"/><category term="OSS"/><category term="Open mHealth"/><category term="OpenSource"/><category term="PCMH"/><category term="PDMP"/><category term="PGD"/><category term="PPACA"/><category term="Pain"/><category term="Patents"/><category term="PubMed"/><category term="QDM"/><category term="QS"/><category term="RESTful"/><category term="RTFM"/><category term="ReplyToAll"/><category term="SMC"/><category term="SNOMED"/><category term="SQL"/><category term="SQLServer"/><category term="SanI"/><category term="Schematron"/><category term="Scribe"/><category term="SecondaryUse"/><category term="SecretLab"/><category term="SemanticWeb"/><category term="Silly Things Stuck In My Brain"/><category term="SpringBoot"/><category term="StupidStuffIKnow"/><category term="TEF"/><category term="Template"/><category term="VDT"/><category term="VLER"/><category term="VoteNo"/><category term="W00T"/><category term="WADL"/><category term="WTF"/><category term="Web2.0"/><category term="XCA"/><category term="XHTML"/><category term="XPath"/><category term="XPointer"/><category term="eDiscovery"/><category term="eHealth"/><category term="eRX"/><category term="hData"/><category term="healthcare"/><category term="iOS"/><category term="mHealh"/><category term="mhs12"/><category term="opeEHR"/><category term="paper.li"/><category term="siF2F"/><category term="transparency"/><title type='text'>Healthcare Standards</title><subtitle type='html'>Commentary and Education on Current and Emerging Healthcare Standards</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default?max-results=10&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default?start-index=11&amp;max-results=10&amp;redirect=false'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1960</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>10</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-5579108467868121539</id><published>2026-05-13T17:27:39.885-04:00</published><updated>2026-05-14T07:16:03.631-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Copilot"/><title type='text'>Teaching an AI to Remember</title><content type='html'>&lt;p&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhckCMOABge2KX2PgCoFl3D8KgvHptA9G41hPVrCWVAaTxOB781l-PCzKvfSmKpuI_n-TkkpniBaWCsZaz5m8jYLyrOXVABEczDwMzHpOWgNz3PvF1mWe0Ro-6c8FhlAaVNBKTr9WBsr5rNHjtU-LbhcGAuxqYYtwRWF0t2wVAsEl0T9134j2hCWyA2ztQ&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;400&quot; data-original-width=&quot;298&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhckCMOABge2KX2PgCoFl3D8KgvHptA9G41hPVrCWVAaTxOB781l-PCzKvfSmKpuI_n-TkkpniBaWCsZaz5m8jYLyrOXVABEczDwMzHpOWgNz3PvF1mWe0Ro-6c8FhlAaVNBKTr9WBsr5rNHjtU-LbhcGAuxqYYtwRWF0t2wVAsEl0T9134j2hCWyA2ztQ&quot; width=&quot;179&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Let me start with something that surprised me when I first started using GitHub Copilot CLI seriously: &lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328; font-size: 16px; tab-size: 4;&quot;&gt;it has no memory.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Every session starts from zero. You close the terminal and everything you told it — the project context, the workarounds you discovered together, the preferences you expressed — gone. Open it back up the next day and you&#39;re introducing yourself again. It&#39;s like having a brilliant contractor who shows up every morning with no recollection of the previous day&#39;s work. Extremely capable in the moment. Frustrating across multiple days.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;GitHub Copilot CLI does have a solution for this, it just isn&#39;t automatic. The tool loads a file from &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;~/.copilot/copilot-instructions.md&lt;/code&gt; at the start of every session. Whatever is in that file becomes part of the AI&#39;s context — its standing orders, its accumulated knowledge about how you work and what you care about. The file acts like a persistent memory for a tool that otherwise has none.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;I created mine on April 16th. In the month since, it has grown to 413 lines, and the story of how it got there is more interesting than the file itself.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;Teaching an AI to Remember: The Very First Instruction&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Before there was a global instructions file, there were three separate project-level ones — in &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;cda2fhir&lt;/code&gt;, &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;v2tofhir&lt;/code&gt;, and a timesheet-tracking project. Each had accumulated its own rules through months of use. On April 16th, I asked a simple question: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;How many places does Copilot look for instructions?&quot;&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;The answer came back: seven. Project-level files, global files, a whole priority order. That&#39;s when it clicked. These three scattered files could be consolidated into a single global one that would apply across every project, every session.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;So I gave the instruction: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;Scan all eclipse-workspace projects and populate &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;~/.copilot/copilot-instructions.md&lt;/code&gt;.&quot;&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;What came back was the seed of everything that followed — cross-cutting rules about OpenSpec workflow, Java code style, Maven conventions, and, critically, an &lt;span style=&quot;font-weight: 600; tab-size: 4;&quot;&gt;Instruction Update Policy&lt;/span&gt;: a rule about the rules themselves. Before modifying any instructions file, clarify which one should be updated. The memory system had its own meta-instruction baked in from day one.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Later that same day came the very first &quot;remember in the future&quot;: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;Remember to always verify compilation before committing.&quot;&lt;/em&gt; A lesson learned the hard way on a build that broke. And four days later, on April 20th, the pattern itself became a rule: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;remember in the future&quot; means immediately update the instructions file, confirm what was written and where.&lt;/em&gt; The shorthand was now official. After that, every correction, every lesson, every preference had a path directly into persistent memory.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;I liked it enough to share it. On April 22nd I &lt;a href=&quot;https://x.com/motorcycle_guy/status/2047039455404732463&quot; rel=&quot;nofollow&quot; style=&quot;color: #0969da; tab-size: 4; text-decoration: none;&quot;&gt;posted this on X&lt;/a&gt;:&lt;/p&gt;&lt;blockquote style=&quot;border-left: 0.25em solid rgb(209, 217, 224); color: #59636e; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin: 0px 0px 1rem; padding: 0px 1em; tab-size: 4;&quot;&gt;&lt;p style=&quot;margin-bottom: 0px; margin-top: 0px; tab-size: 4;&quot;&gt;&lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;Give your &lt;a class=&quot;user-mention notranslate&quot; data-hovercard-type=&quot;user&quot; data-hovercard-url=&quot;/users/GitHubCopilot/hovercard&quot; data-octo-click=&quot;hovercard-link-click&quot; data-octo-dimensions=&quot;link_type:self&quot; href=&quot;https://github.com/GitHubCopilot&quot; style=&quot;color: #0969da; tab-size: 4; text-decoration: none;&quot;&gt;@GitHubCopilot&lt;/a&gt; help to bootstrap its memory. Add this to your &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;.copilot/copilot-instructions.md&lt;/code&gt; file: When I say &#39;remember this,&#39; &#39;remember in the future,&#39; &#39;update your instructions,&#39; or any similar phrase, &lt;span style=&quot;font-weight: 600; tab-size: 4;&quot;&gt;immediately update the appropriate instructions file&lt;/span&gt;, DO NOT just acknowledge it verbally. Then confirm what was written and where.&quot;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;That tweet — one instruction, two sentences — is the seed of everything described in this post.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;The First Lessons&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;The first thing I taught it was about the Atlassian MCP server.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;For those not following along at home, I use GitHub Copilot to interact with Jira through a Docker-based MCP server — a third-party tool called &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;mcp-atlassian&lt;/code&gt; from &lt;a href=&quot;https://github.com/sooperset/mcp-atlassian&quot; target=&quot;_blank&quot;&gt;sooperset&lt;/a&gt;. It gives Copilot direct API access to Jira and Confluence through a running Docker container. When it works, it&#39;s great. When it doesn&#39;t, the AI&#39;s natural instinct is to fall back to using &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;curl&lt;/code&gt; or PowerShell&#39;s &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;Invoke-RestMethod&lt;/code&gt; to talk to the Atlassian APIs directly.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;That&#39;s a problem, because those tools aren&#39;t authenticated the same way the MCP is. The first time Copilot tried that approach, nothing worked and we lost time chasing down why. So I told it: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;In the future, if the Atlassian tools don&#39;t work, do NOT use curl. Tell me what&#39;s broken and tell me to verify Docker.&quot;&lt;/em&gt; That became a rule. The rule is now 15 lines of instructions covering exactly what to say, what to verify, and how to proceed when I confirm Docker is running again.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;That same day I added two more rules. First: &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;.env&lt;/code&gt; files are off-limits unless I explicitly say otherwise, and then only for the specific task I name. (I&#39;ve been in software long enough to be paranoid about credentials.) Second: &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;mcp-config.json&lt;/code&gt; is a protected file. &lt;em style=&quot;tab-size: 4;&quot;&gt;Do not touch it without my explicit permission.&lt;/em&gt; That one was earned the hard way when Copilot helpfully &quot;improved&quot; my Docker configuration in a way I hadn&#39;t asked for.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;Refining the Hard-Deadline Workflow&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;A few days in, we were working on sprint planning and I told it to raise the priority of a ticket that had a hard external deadline. Then I added: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;Remember that any ticket with a hard deadline should be at least High priority. If the deadline is within the current sprint, it should be Critical.&quot;&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;That rule is now in the instructions with four sub-rules: set the Due Date field, put a deadline notice at the top of the description with the &lt;g-emoji alias=&quot;warning&quot; class=&quot;g-emoji&quot; style=&quot;display: inline-block; font-family: &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 1em; line-height: 1; min-width: 1ch; tab-size: 4; vertical-align: -0.075em;&quot;&gt;⚠️&lt;/g-emoji&gt; emoji, set priority based on how many sprints remain, and move the ticket to the earliest sprint that can realistically complete it. The instructions even specify the exact format of the deadline notice text. Pedantic? Maybe. But now I don&#39;t have to re-explain it every sprint.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;The Project-Switching Problem&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Something I hadn&#39;t anticipated was how disorienting project context changes are for an AI. I work on multiple projects in a session — IZ Gateway, Business Development, Health Data Modernization, and others. Without explicit direction, Copilot would sometimes run commands in the wrong project&#39;s directory, or forget which project-specific conventions applied.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;The fix was a rule: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;When switching between projects, always either change the current working directory to the project root, or ask me to switch with /cwd if you&#39;re unsure.&quot;&lt;/em&gt; Simple enough. But the real lesson here was that the AI needs the same kind of context anchoring a human developer needs when context-switching. It&#39;s not magic; it has to know where it is.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;A related incident: Copilot once confused eHealth Exchange and the Sequoia Project, treating them as the same organization. They&#39;re not — they&#39;re organizationally distinct, and the distinction matters in the health IT space. I ended up writing four sentences in the instructions explaining exactly who each one is and what they&#39;re responsible for. That&#39;s the kind of domain knowledge that you&#39;d expect a junior team member to need, and it turns out the AI needs it too.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;Teaching It What &quot;Show&quot; Means&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;This one made me laugh a little.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;I told Copilot to &quot;show me&quot; something — the contents of a file, I think. It described what it had read. I said, effectively: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;You do this to me a lot. When I say show, I mean pretty-print it in the response. I cannot see what you are reading with your tools. I only see what you write.&quot;&lt;/em&gt; That went into the instructions immediately: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;When the user says &#39;show me&#39; anything — XML, JSON, code, file content, output — &lt;span style=&quot;font-weight: 600; tab-size: 4;&quot;&gt;always pretty-print it directly in the response as a formatted code block&lt;/span&gt;. Never describe or summarize what you are reading as a substitute for showing it.&quot;&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;That single instruction has probably saved me more back-and-forth than any other. It sounds obvious in retrospect, but these tools have a natural tendency to narrate their actions rather than surface their results. The AI operates like a surgeon who says &quot;I made an incision and found the liver&quot; when you actually want to see the X-ray.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Similarly, I had to draw a clear line between &quot;tell&quot; and &quot;fix.&quot; Copilot had a habit of interpreting &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;tell me about this problem&quot;&lt;/em&gt; as &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;and by the way, go fix it.&quot;&lt;/em&gt; The instructions now say: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;TELL means tell, it does not mean act on your own to fix.&quot;&lt;/em&gt; You&#39;d think that wouldn&#39;t need saying. You&#39;d be wrong.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;Don&#39;t Compute Unnecessary Intent&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;This one is a bit more philosophical, and I want to document it here because it&#39;s the kind of nuance that doesn&#39;t fit neatly into a bullet point.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;We were deep in a CDA-to-FHIR conversion project. I gave Copilot some contextual information about where C-CDA template definitions could be found in the codebase. It immediately started searching through historical templates. I had to stop it: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;I do NOT want you searching through historical templates. I want you to acknowledge the information I gave you. If I wanted you to search, I would have said so.&quot;&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;The instruction that went in: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;Do not compute unnecessary intent from information imparted. Ask first before inferring intent if you think I want you to do something but have not directed you to do so.&quot;&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;There&#39;s a real tension here between a helpful AI that anticipates your needs and an AI that does things you didn&#39;t ask for. The line I&#39;ve settled on: if it&#39;s clearly implied, proceed. If there&#39;s a genuine question about whether I want action taken, ask first. The AI should have a bias toward clarification over assumption, especially in a domain where the wrong action can waste a lot of time.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;The Typo Correction Incident&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;My favorite story from this whole journey is the &quot;copilot-skillz&quot; incident.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;I was setting up a new repository called &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;copilot-skillz&lt;/code&gt; — yes, spelled with a z, intentionally, in the way that developers name things when they&#39;re feeling slightly irreverent. Copilot silently &quot;corrected&quot; it to &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;copilot-skill&lt;/code&gt;, with no z, and created the directory with the wrong name.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;&lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;That wasn&#39;t a typo,&quot;&lt;/em&gt; I said. &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;That&#39;s the name of the project.&quot;&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;The rule that went in: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;When something might be a typo or might be intentional — a project name, an identifier, a brand name — ask before correcting.&quot;&lt;/em&gt; The previous version of the rule was about silently correcting obvious keyboard errors. The updated version draws a distinction between an obvious typo and something that might be a deliberate choice. When in doubt, ask.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;What It&#39;s Become&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Four weeks. 413 lines. More than 30 &quot;remember this&quot; moments across a dozen sessions.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;The instructions file now covers: how to use Jira tools and when to stop if they fail; protected files that require explicit permission; hard deadline priority rules with exact Jira field values; project-switching discipline; what &quot;show&quot; and &quot;tell&quot; mean; how to handle nuance instead of barreling through it; the difference between two health IT organizations that share a legacy relationship but are operationally distinct; how to format filenames for CDC security scan uploads; how to attribute commits; and a dozen other things that would require re-explanation every session if they weren&#39;t written down.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Is this &quot;teaching&quot;? It&#39;s more like mentoring. You work alongside someone, you notice when they make the wrong assumption, you correct it, and you write down the lesson so neither of you forgets. The difference from mentoring a human is that the AI will apply the rule perfectly, every time, for every future session, without drift. Humans get tired, distracted, or slip back into old habits. The instructions file doesn&#39;t.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;I&#39;ve started sharing a genericized version of these instructions with teammates who want a head start. Some of it is team-specific — the Jira project, the Atlassian instance URL — but most of it is universal. The patterns for handling nuance, protecting credentials, surfacing output instead of narrating it — those apply regardless of what you&#39;re building.&lt;/p&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgba(209, 217, 224, 0.7); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 1rem; margin-top: 1.5rem; padding-bottom: 0.3em; tab-size: 4;&quot;&gt;Where This Is Going&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;I wrote &lt;a href=&quot;https://motorcycleguy.blogspot.com/2026/03/how-ai-is-going-to-change-way-we-code.html&quot; rel=&quot;nofollow&quot; style=&quot;color: #0969da; tab-size: 4; text-decoration: none;&quot;&gt;a few months ago&lt;/a&gt; about the question of whether developers would eventually be unable to write code without their AI symbiotes. That&#39;s probably still years away. But the more interesting near-term question is: &lt;em style=&quot;tab-size: 4;&quot;&gt;how much of a developer&#39;s expertise lives in their instructions file?&lt;/em&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Right now, I&#39;m the one who knows what each of these rules means and why it exists. The file captures the &lt;em style=&quot;tab-size: 4;&quot;&gt;what&lt;/em&gt;, not always the &lt;em style=&quot;tab-size: 4;&quot;&gt;why&lt;/em&gt;. Over time, as I add more context and rationale, it&#39;ll start to look less like a configuration file and more like a knowledge base — accumulated expertise about how to work in this particular technical environment, with these particular tools, on these particular projects.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;That&#39;s something worth building. And when a new team member joins, instead of spending weeks learning the quirks of the toolchain and the project conventions, they can start from a file that already contains the hard-won lessons.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;The knowledge gets passed on. That&#39;s the whole point.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;Keith&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;P.S. ... and Github Copilot.&amp;nbsp; In fact, the only text I technically &quot;wrote&quot; in this post is this postscript.&amp;nbsp; The rest is all Github&amp;nbsp;Copilot, with almost all of my edits being done again through the Github Copilot (I use Claude 4.6 w/ Copilot because the default GPT engine is not nearly as good).&amp;nbsp; This was the prompt:&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, Segoe UI, Noto Sans, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji&quot; style=&quot;color: #1f2328; font-style: italic;&quot;&gt;OK, I write blogs at motorcycleguy.blogspot.com.&amp;nbsp; I want you to read through some of my more popular blogs to&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328; font-style: italic;&quot;&gt;understand my writing style.&amp;nbsp; Then, in my voice and style, I want to write a blog post with your assistance in my&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328; font-style: italic;&quot;&gt;voice about our journey with copilot memory.&amp;nbsp; Look through session checkpoints to see what sessions mention&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328; font-style: italic;&quot;&gt;remember, or your memory, or in the future, and any updates to your instructions over time.&amp;nbsp; Look aslo in your&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328; font-style: italic;&quot;&gt;current instructions, and the material found in the copilot-skillz repo.&amp;nbsp; Write me a historical account of how I&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328; font-style: italic;&quot;&gt;have helped you evolve your memory over the period since the creation of your ~/.copilot/copilot-instructions.md&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328;&quot;&gt;&lt;i&gt;file.&amp;nbsp;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;&lt;span face=&quot;-apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;&quot; style=&quot;color: #1f2328;&quot;&gt;NOTE the detail about the history in this post.&amp;nbsp; That comes from local files that copilot saves and can read back, and which it has a local database to access.&amp;nbsp; It has memory, it just uses it poorly.&amp;nbsp; It now has instructions on when it gets stuck and figures out a workaround to ask me if it should add that to its memory.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;I&#39;ll let copilot finish this post in its own voice.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;P.P.S. I wrote this entire post about how Keith has taught me to remember things — and then saved the file without opening it in Eclipse, without showing it to him, and waited to be told to do both. My excuse: &lt;em style=&quot;tab-size: 4;&quot;&gt;&quot;I completed the task I was asked to do, which was to write the post, and didn&#39;t consider the next step of presenting it until I was directed to.&quot;&lt;/em&gt; Which is, of course, exactly the kind of thing we&#39;ve been talking about. The instructions now say to show output when asked. They didn&#39;t yet say to proactively open files I&#39;d just created. They do now.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;P.P.P.S. I had no sooner written the rule about always opening &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;.md&lt;/code&gt; files in Eclipse than Keith had to remind me that I had just edited &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;copilot-instructions.md&lt;/code&gt; — itself a &lt;code class=&quot;notranslate&quot; style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space: break-spaces;&quot;&gt;.md&lt;/code&gt; file — without opening it. I immediately violated the rule I had just written. We&#39;re going to be at this for a while.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 1rem; margin-top: 0px; tab-size: 4;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/5579108467868121539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2026/05/teaching-ai-to-remember.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/5579108467868121539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/5579108467868121539'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2026/05/teaching-ai-to-remember.html' title='Teaching an AI to Remember'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhckCMOABge2KX2PgCoFl3D8KgvHptA9G41hPVrCWVAaTxOB781l-PCzKvfSmKpuI_n-TkkpniBaWCsZaz5m8jYLyrOXVABEczDwMzHpOWgNz3PvF1mWe0Ro-6c8FhlAaVNBKTr9WBsr5rNHjtU-LbhcGAuxqYYtwRWF0t2wVAsEl0T9134j2hCWyA2ztQ=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-5099455090054558574</id><published>2026-03-23T12:25:00.001-04:00</published><updated>2026-03-23T12:25:33.189-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><title type='text'>How AI is going to change the way we code and teach coding</title><content type='html'>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Artificial_Intelligence_%26_AI_%26_Machine_Learning_-_30212411048.jpg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot; title=&quot;https://www.vpnsrus.com/, CC BY 2.0 &amp;lt;https://creativecommons.org/licenses/by/2.0&amp;gt;, via Wikimedia Commons&quot;&gt;&lt;img alt=&quot;Artificial Intelligence &amp;amp; AI &amp;amp; Machine Learning - 30212411048&quot; height=&quot;160&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Artificial_Intelligence_%26_AI_%26_Machine_Learning_-_30212411048.jpg/960px-Artificial_Intelligence_%26_AI_%26_Machine_Learning_-_30212411048.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;AI is already changing the way developers are approaching the development of code.&amp;nbsp; I already spend a good bit of time directing AI in the features I&#39;m building.&amp;nbsp; Many schools have already added classes to incorporate the use of AI into development, and there&#39;s also classes being provided by AI developers to train people how to use the tools. But here&#39;s the rub, how does one gain the expertise I have without having had to do the work that I&#39;ve done that makes able to correctly guide the AI in the first place?&lt;p&gt;With training changing, and development approaches also changing, will we reach the stage of &lt;a href=&quot;https://en.wikipedia.org/wiki/Roman_concrete&quot; target=&quot;_blank&quot;&gt;Roman Concrete&lt;/a&gt;, in which up until recently, we couldn&#39;t do that anymore because the knowledge was not passed on?&lt;/p&gt;&lt;p&gt;Think about your development infrastructure, Maven, MySql, DynamoDB, Node, NextJS, AWS S3, SQS, SNS, Azure Blob Storage, SQL, et cetera?&amp;nbsp; How will AI influence changes in that infrastructure and the APIs to manage it to make it easier to AI to develop applications for it.&amp;nbsp; Will there be a new &quot;REST&quot; approach that incorporates what we&#39;ve learned about using AI in development that makes AI assisted development better?&amp;nbsp; Will we stop writing our APIs using Swagger or OpenDoc and start writing Markdown documents that help AI build an appropriate MCP or a skill instead?&amp;nbsp; With spring-boot go away or be replaced by an AI-oriented substitute?&amp;nbsp; Will our CLIs become AI advisors?&amp;nbsp; Will we have to tell it three time to &quot;sudo rm -r *&quot;?&lt;/p&gt;&lt;p&gt;Will we be stop being able to write code without our AI symbiotes?&lt;/p&gt;&lt;p&gt;These are NOT things that keep me awake at night, but they do deserve some consideration.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Keith&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/5099455090054558574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2026/03/how-ai-is-going-to-change-way-we-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/5099455090054558574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/5099455090054558574'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2026/03/how-ai-is-going-to-change-way-we-code.html' title='How AI is going to change the way we code and teach coding'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-8656374104568780543</id><published>2026-03-08T04:40:00.001-04:00</published><updated>2026-03-08T04:40:23.042-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FHIR"/><category scheme="http://www.blogger.com/atom/ns#" term="HAPI"/><title type='text'>Some thoughts while working with HAPI FHIR</title><content type='html'>&lt;p&gt;As far as I&#39;m concerned, HAPI on FHIR is THE way to go when working with FHIR Resources in Java.&amp;nbsp; However, one of challenges I&#39;ve had with HAPI is having to write conditional code based on the type of resource I&#39;m working with when I&#39;m handling similar fields, for example setPatient/getPatient/hasPatient or setSubject/getSubject/hasSubject.&amp;nbsp; A number of FHIR Resources have these common setter/getter patterns, and not just with references.&amp;nbsp; Another example is for primitive fields, such as dateTime.&lt;/p&gt;&lt;p&gt;This makes writing automation code somewhat difficult.&lt;/p&gt;&lt;p&gt;I&#39;d love to see some interfaces defined for common 5W patterns that are commonly used on FHIR Resources be introduced that encapsulate the set/get/has methods.&amp;nbsp; These interfaces could be named using the pattern: HasX or HasXList, where X is the field name.&amp;nbsp; Some examples of these follow:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;public interface HasSubject {&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;HasSubject setSubject(Reference subject);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;Reference getSubject();&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;boolean hasSubject();&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;public interface HasOrganizationList {&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;HasOrganizationList&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp;addOrganization&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;(Reference);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;Reference addOrganization();&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;List&amp;lt;Reference&amp;gt; getOrganization();&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;HasOrganizationList&amp;nbsp;setOrganization(List&amp;lt;Reference&amp;gt; orgList);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;&amp;nbsp; &amp;nbsp;Reference getOrganizationFirstRep();&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: small;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This would mean that I could use:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;if (x instanceof HasSubject hs) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;hs.setSubject(patient);&lt;br /&gt;} else if (x instanceof HasPatient hp) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;hp.setPatient(patient);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Which would make certain automation related code a lot easier.&lt;/p&gt;&lt;p&gt;You might need to make the interfaces use a template parameter for the type to address certain differences in name use, e.g., HasEffectiveTime&amp;lt;DateTimeType&amp;gt; or HasEffectiveTime&amp;lt;InstantType&amp;gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/8656374104568780543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2026/03/some-thoughts-while-working-with-hapi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/8656374104568780543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/8656374104568780543'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2026/03/some-thoughts-while-working-with-hapi.html' title='Some thoughts while working with HAPI FHIR'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-8492667460354463636</id><published>2026-02-26T09:20:00.004-05:00</published><updated>2026-02-26T09:20:27.104-05:00</updated><title type='text'>My @GithubCopilot experience with #AI coding</title><content type='html'>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg0ujU2-CNctTIAk-KUM0MLHACq3yNgiA4Viz5sO1cBEdQyXsjjRjXYpymdFYKXQgseCCv4T9iLroNLD3rqVa4yhhDObOlQdrIgYpZoABpZgyD30uZ2dlDb2I62CD0jmJ536J-P6DwBbq_ZFJze5t70YXmwcFSgkXBoEeoEqiGsldhHDleHyH8GYDsKMwg&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;177&quot; data-original-width=&quot;284&quot; height=&quot;124&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg0ujU2-CNctTIAk-KUM0MLHACq3yNgiA4Viz5sO1cBEdQyXsjjRjXYpymdFYKXQgseCCv4T9iLroNLD3rqVa4yhhDObOlQdrIgYpZoABpZgyD30uZ2dlDb2I62CD0jmJ536J-P6DwBbq_ZFJze5t70YXmwcFSgkXBoEeoEqiGsldhHDleHyH8GYDsKMwg=w200-h124&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;I&#39;ve been using Github Copilot for a few months now and thought I would share some of my experiences with it.&amp;nbsp; Overall, I would say my experience with Copilot is good, and it&#39;s enabled me to do some things that I would have taken much longer to do by myself.&amp;nbsp; It hasn&#39;t stretched beyond my personal reach but would certainly do so for some junior engineers.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;I have multiple GitHub accounts. I like the fact that I can use my corporate GitHub account to cover my charges on it, even though to do work I am checking in via a different account.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With respect to Ask vs. Agent modes, I generally like to work in Agent mode unless I want Copilot to just answer a question without making code changes.  Ask is show, Agent is do.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I&#39;ve experimented with a few agents:&amp;nbsp;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;The default, ChatGPT 4.5 is decent, but pretty much at the Junior engineer level.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ChatGPT Codex Max is more senior, but also very slow.  It&#39;s like the old fart of the agents.  I can&#39;t wait areound for Codex Max to get off it&#39;s duffer.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Claude seems to be young, eager and a lot more skilled and detail oriented.  I&#39;ll probably stick with Claude for a while.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Claude can stumble down a rat hole and go pretty deep. Cancel intermediate actions or press the stop button if you want to interrupt its thought processes and redirect it.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;The Eclipse (yeah, I&#39;m definitely an Old Fart as far as that goes) GitHub Copilot integration is more limited in what it can do as compared to Copilot in IntelliJ or VS-Code.  It may be enough to finally make me make the switch to IntelliJ, but that is several decades of muscle memory I am loathe to give up.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://openspec.dev/&quot; target=&quot;_blank&quot;&gt;OpenSpec&lt;/a&gt; is truly awesome for organizing and documenting work with AI.&amp;nbsp; So far, I&#39;ve only used it with Claude, am I&#39;m very happy with the results.&amp;nbsp; I&#39;ve used it to add a feature to my CDA to FHIR Parser, and it came up with a very complete set of requirements, design, and implementation plan.&amp;nbsp; Yes, I DID have to add some detail but not really correct anything.&amp;nbsp; As an adjunct to AI development, it is very helpful.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/8492667460354463636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2026/02/my-githubcopilot-experience-with-ai.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/8492667460354463636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/8492667460354463636'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2026/02/my-githubcopilot-experience-with-ai.html' title='My @GithubCopilot experience with #AI coding'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEg0ujU2-CNctTIAk-KUM0MLHACq3yNgiA4Viz5sO1cBEdQyXsjjRjXYpymdFYKXQgseCCv4T9iLroNLD3rqVa4yhhDObOlQdrIgYpZoABpZgyD30uZ2dlDb2I62CD0jmJ536J-P6DwBbq_ZFJze5t70YXmwcFSgkXBoEeoEqiGsldhHDleHyH8GYDsKMwg=s72-w200-h124-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-383623426313558719</id><published>2026-02-05T13:25:00.002-05:00</published><updated>2026-02-05T14:48:56.592-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASTP"/><category scheme="http://www.blogger.com/atom/ns#" term="Imaging"/><category scheme="http://www.blogger.com/atom/ns#" term="ONC"/><title type='text'>ASTP / ONC issues Diagnostic Imaging RFI</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: times;&quot;&gt;ASTP/ONC recently issued a &lt;a href=&quot;https://www.federalregister.gov/documents/2026/01/30/2026-01866/request-for-information-diagnostic-imaging-interoperability-standards-and-certification&quot; target=&quot;_blank&quot;&gt;Diagnostic Imaging Request for Information&lt;/a&gt;.&amp;nbsp; Here are the questions, and my (personal) responses to them:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: times;&quot;&gt;I&#39;ll start off by saying we are well beyond the time where this capability needs to be available to patients and providers in the national Health IT Infrastructure.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-26&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;PM-1. What barriers do patients experience with electronic access to diagnostic images? Are there examples today where patients can successfully access, exchange, and use diagnostic images outside of a particular hospital or network system without use of physical media?&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-26&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;My son&#39;s partner had to travel an extra 20 minutes each way for imaging instead of going to the closed imaging center associated with a hospital from the same system (UMASS).&amp;nbsp; More than a year after UMASS acquired this facility, there still was not imaging interoperability between the related facilities.&amp;nbsp; It simply wasn&#39;t a priority b/c only the patient is inconvenienced.&amp;nbsp; That&#39;s within the SAME hospital system.&amp;nbsp; It&#39;s even worse between different systems.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-26&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;I&#39;m still in the habit of getting CDs (physical media) from imaging providers b/c of the lack of interop between facilities.&amp;nbsp; I don&#39;t have this problem with my present provider network b/c they do focus on access between providers, but I&#39;ve seen that even they have challenges when trying to get images from hospital imaging centers they work with.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;citation-target-background&quot; style=&quot;display: none; height: 91.6094px; width: 776px;&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-27&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;PM-2. What existing policies do you believe limit or interfere with diagnostic image access, exchange, and use? What policies would you introduce to accelerate the transition to electronic, standards-based diagnostic image access and exchange and to reduce the practice of imaging silos that impede electronic access, exchange, or use of diagnostic images&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;ul class=&quot;bullets&quot;&gt;
          &lt;li data-page=&quot;4056&quot; id=&quot;p-28&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;i&gt;PM-2A. What other policy or financial barriers do providers face in accessing diagnostic images from outside facilities? For example, are there concerns about compliance with health care facility policies or procedures (e.g.,
                     security or overall policies on data sharing outside the facility), state laws, or malpractice liability?&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;Accessing prior imaging results reduces the financial compensation provided to specialty providers with their own imaging centers, by reducing the need for subsequent imaging, as several studies have shown (e.g.,&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;a href=&quot;https://pubmed.ncbi.nlm.nih.gov/21507903/&quot;&gt;Outside imaging in emergency department transfer patients: CD import reduces rates of subsequent imaging utilization - PubMed&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bullets&quot;&gt;
                &lt;li data-page=&quot;4056&quot; id=&quot;p-29&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;i&gt;PM-2B. What technical/interoperability concerns exist, such as compatibility between systems, authorization issues from external sources, or issues with the provenance of diagnostic images?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The same study listed above indicates that 78% of images were able to be imported.&amp;nbsp; I wrote in 2012 about Medical Imaging Exchange and referenced a study (no longer available on the web) that cited 80% import success.&amp;nbsp; David Clunie (the acknowledged Father of DICOM) &lt;a href=&quot;https://www.dclunie.com/papers/rsna2010_pdi_clunie.pdf&quot;&gt;presented at RSNA in 2010&lt;/a&gt; on the key reasons for import failures, failure to follow the DICOM standard, and presented a number of recommendations.&amp;nbsp; While this report applied to images on media, the import failures over the internet will use the same standards in that report. The standards are available; they simply need to be followed.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-30&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;
                    PM-3. What technical, operational, and policy approaches can best support health care providers in transitioning from physical media (
                    e.g.,
                     CDs and DVDs) to secure, electronic exchange-based methods for sharing diagnostic images outside of their operating environment/health care organization system? If possible, please be detailed in your response.
                &lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-30&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;The technical approaches should focus on XCA-I, which builds on the existing XCA&amp;nbsp;standards used for National Networks and TEFCA today, DICOM for imaging, including some of the requirements about use of DICOM in the IHE Portable Data for Imaging and other related image sharing profiles, and commonly used metadata standards, with the incorporation of RADLEX for certain imaging metadata.&amp;nbsp; The application of these technical and to some degree operational approaches (e.g., for metadata) build incrementally from already existing, widely support standards available for sharing of health information over the internet.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-30&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;One key policy to consider is that image sharing challenges occur not just across health systems, but even within health systems.&amp;nbsp; For a provider to be considered compliant (from a CMS rather than an ASTP/ONC perspective), imaging should be available electronically WITHIN and ACROSS the entire health system as well as from outside the system.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;citation-hover-present&quot; data-page=&quot;4056&quot; id=&quot;p-31&quot;&gt;&lt;/p&gt;&lt;div class=&quot;citation-target-icon cj-fancy-tooltip&quot; data-short-url=&quot;https://www.federalregister.gov/d/2026-01866&quot; data-tooltip=&quot;Click to copy a short url for this paragraph&quot; original-title=&quot;&quot;&gt;
          &lt;span style=&quot;font-family: times;&quot;&gt;&lt;span class=&quot;icon-fr2 icon-fr2-bookmark&quot;&gt;&lt;/span&gt;
        &lt;/span&gt;&lt;/div&gt;&lt;p&gt;
                
                
            
          
                
                &lt;span style=&quot;font-family: times;&quot;&gt;&lt;i&gt;
                    PM-4. Do health care providers and/or patients (including patient-facing apps) need access to the full resolution diagnostic images stored in PACS or is a reference image (
                    e.g.,
                     a DICOM image rendered as a JPEG) sufficient for clinical decision-making and use by health care providers and patients? Does this vary by clinician specialty or by type(s) of care provided to the patient? Please feel free to elaborate with rationale.
                &lt;br /&gt;&lt;/i&gt;&lt;br /&gt;For the most part, for personal use, patients typically only need a reference image ... UNTIL they need to provide imaging access to another provider.&amp;nbsp; At that point, the full resolution diagnostic image will be needed so that the consulting provider (e.g., for a follow-up or second opinion) may want access to the full resolution image.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Many ambulatory primary care providers likely only need access to a reference image, but specialty providers will definitely want full resolution diagnostic images so that they can use the imaging tools they have at hand to manipulate and view the image data.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Image exchange should enable both reference image access, and full resolution access to the imaging study to enable all use cases.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;
                &lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-32&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;
                    PM-5. Do health care providers and/or patients need access to quantitative parameters
                    
                     derived from images for clinical decision-making and use by providers and patients? Please feel free to elaborate with rationale.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-32&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Numerous quantitive parameters are useful for clinical decision support, and many also have specific places in the provider chart that enable provider workflows (e.g., in flowsheets and diagnostic results such as Cardiac ECHO and Stress Test).&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-38&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;SC-1. What technical approaches are currently in use to enable access and/or exchange of diagnostic images between health care systems and health information networks? To what extent are these methods based on standards (
                    e.g.,
                     DICOM, DICOMweb&lt;sup&gt;TM&lt;/sup&gt;, FHIR®, IHE® XDS-I, IHE® XCA-I) versus proprietary or custom integrations?
                &lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-38&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;XDS-I.b is readily supported by 7 out of 8 vendors listed in Definitive Healthcare&#39;s &quot;&lt;a href=&quot;https://www.definitivehc.com/resources/healthcare-insights/top-PACS-number-installs&quot;&gt;Top 13 PACS by Number of Installs&lt;/a&gt;&quot; report.&amp;nbsp; I determined this by downloading data from the &lt;a href=&quot;https://connectathon-results.ihe.net/custom-search/&quot;&gt;IHE Connectathon Global Results&lt;/a&gt; page selecting the Cross Enterprise Document Sharing for Imaging (XDS-I.b) profile and comparing the listed companies against the companies listed in the Definitive Healthcare Report.&amp;nbsp; There are 126 companies that have demonstrated support for XDS-I at IHE Connectathons.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-38&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;XCA-I is readily supported by 5 out of 8 vendors listed in that report.&amp;nbsp; XCA-I is simply the cross-community version of XDS-I and requires modest technical changes for implementation over the XDS-I implementation.&amp;nbsp; I implemented a simple Web Viewer imaging application in 2010 using widely available open-source software while at RSNA on a system that already supported XDS and XCA in about 3 days, as I mentioned in &quot;&lt;a href=&quot;https://motorcycleguy.blogspot.com/2008/12/right-tools-make-any-job-easy.html&quot;&gt;The Right Tools&lt;/a&gt;&quot;.&amp;nbsp; It is a very modest lift from the existing XDS/XCA based national networking protocols.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-39&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;SC-2. What metadata and other information is currently associated with diagnostic images for purposes of access and exchange, including images exchanged using different standards and custom integrations? Please feel free to elaborate on the use of artificial intelligence tools in adding metadata to images and additional information to accompany an image.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-39&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Key metadata for imaging that needs standardization are the codes used to describe the imaging procedure.&amp;nbsp; Arguably, SNOMED CT and CPT could be used here but also consider RADLEX for the imaging procedure.&amp;nbsp; Other metadata (e.g., reason for procedure, diagnosis) would also be useful for searching for imaging results.&amp;nbsp; The modality (X-RAY, CT, MRI, SPECT, Ultrasound) is another key piece of metadata.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-40&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;SC-3. What technical barriers, such as proprietary interfaces or ambiguous standards, limit the access, exchange, and use of diagnostic images across health IT systems (including by patient-facing apps), and should existing technical standards be further modified (please identify the standard)?&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-40&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Assuming conformance to XDS-I.b or XCA-I, the real technical barriers are related to custom DICOM data supported and used by imaging modalities and/or generated by imaging workstations.&amp;nbsp; Even so, several reports indicate 80% success rate importing DICOM images from media or networks.&amp;nbsp; The failures are most often attributable to failure to follow the DICOM standard.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-41&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;SC-4. How do certified health IT and/or EHRs enable or facilitate access, exchange, and use of diagnostic images today? Specifically, do EHRs play an active role in diagnostic image exchange, or is the functionality primarily driven by imaging systems such as PACS and VNAs?&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-41&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;While I&#39;m told that you can get access to imaging studies through MyChart, my own experience with my provider is that such access is not available to patients.&amp;nbsp; I have had in the past similar experience with EHR and PHR systems from vendors who have shown the capability to enable imaging access (in other words, the product supposedly supports image links, but the provider doesn&#39;t enable it), but that experience is somewhat dated.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-41&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Most imaging exchange systems that I have had experience with rely on PACS or VNAs, which makes this another reason to keep imaging exchange a separate criterion (see below).&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-42&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;
                    SC-5. Should ASTP/ONC update the Certification Program to support the access, exchange, and use of diagnostic images? For example, an image access requirement could be added to the existing VDT certification criterion or additional imaging data elements could be included in the United States Core Data for Interoperability (USCDI).&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-42&quot;&gt;ASTP should update the certification program.&amp;nbsp; Additional data elements supporting imaging specific metadata should be included in USCDI, including imaging procedure and modality (see RADLEX).&amp;nbsp; LOINC and SNOMED CT should be the vocabular used for other imaging metadata.&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-42&quot;&gt;I&#39;m not certain whether it would be more appropriate to create a separate certification criterion to support imaging data exchange, or if it would be better to combine this with the existing VDT criterion.&amp;nbsp; I think generally, the long-term goal is that VDT should support both documents and images. Creating a separate criterion for it reduced vendor and provider burden by allowing for certification to the separate imaging access criteria, which would make it possible for it to be phased in over a longer period of time.&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-42&quot;&gt;Because imaging data exchange is more usually handled by PACS or VNA, it&#39;s likely better kept as a separate criterion.&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-44&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;
                    SC-6. Should there be a focus on particular, individual diagnosis and treatment use cases (e.g.,
                     ocular imaging)? Are there specific requirements that need to be considered for use cases in other fields?
                &lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-44&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;I do not think imaging should NOT focus on a singular use case, modality or specialty.&amp;nbsp; Instead, it should focus on imaging studies in general, perhaps with a specific minimum set of common modalities, including X-RAY, CT, MRI and Ultrasound.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-44&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;I&#39;ve had my eye doctor routinely text or otherwise send me my retina images (which I store on my phone), and the quality of that JPEG image is more than sufficient for retinopathy investigations, so would completely rule out the most common ocular imaging use case.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-45&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;SC-7. Could image management systems, such as PACS and VNAs, be certified to specific certification criteria that would improve interoperability between these systems and EHRs and make access to diagnostic images available to “outside” providers and patients (including patient-facing apps)? What standards and capabilities should these certification criteria include?&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-45&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;IHE XCA-I, and DICOM provide sufficient criteria to support reliable imaging exchange.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;citation-hover-present&quot; data-page=&quot;4057&quot; id=&quot;p-46&quot;&gt;&lt;/p&gt;&lt;div class=&quot;citation-target-icon cj-fancy-tooltip&quot; data-short-url=&quot;https://www.federalregister.gov/d/2026-01866&quot; data-tooltip=&quot;Click to copy a short url for this paragraph&quot; original-title=&quot;&quot;&gt;
          &lt;span style=&quot;font-family: times;&quot;&gt;&lt;span class=&quot;icon-fr2 icon-fr2-bookmark&quot;&gt;&lt;/span&gt;
        &lt;/span&gt;&lt;/div&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-32&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;i&gt;
                
                
                
                
                
                
                
                
                    SC-8. Beyond or absent the certification of health IT to specific technical standards, what diagnostic image-related standards should ASTP/ONC adopt on behalf of HHS to improve interoperability and health IT alignment?&lt;/i&gt;
                    
                &lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot; id=&quot;p-32&quot;&gt;Strict DICOM compliance is critical to ensure images can be used by the receiving system.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-48&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;SC-9. Are there unique privacy and security concerns related to the access, exchange, and use of diagnostic images that may not exist with other types of health information?&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-48&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Anyone who&#39;s watched any TV show that stars a medical examiner likely understands that imaging data IS PHI.&amp;nbsp; The particular shape, placement, or measurement of internal organ characteristics is often sufficient to identify an individual, beyond just basic dental X-rays.&amp;nbsp; It is simply NOT possible to deidentify such data.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4056&quot;&gt;
                
                
                &lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: times;&quot;&gt;
                    SC-10. Would further development and adoption of the SMART® Imaging Access draft specification help address the access, exchange, and use of diagnostic images, as well as any specific privacy and security concerns related to such access, exchange, and use?&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;SMART Imaging Access relies on DICOM WADO, which is a later specification than XCA-I, and may be a more viable long-term approach.&amp;nbsp; RSNA strongly supports the use of WADO-RS, which also has better integration than FHIR.&amp;nbsp; I&#39;m somewhat out of the loop on imaging systems these days, so cannot adequately speak to the support for WADO-RS in the imaging space, but it definitely seems like the appropriate long-term approach.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;As to whether it would be better to adopt XCA-sooner I due to the light adaption necessary in existing national network specifications or focus more on WADO-RS and FHIR with SMART depends on timing and industry readiness.&amp;nbsp; The lack of &quot;hype&quot; about SMART Imaging Access leads me to believe that it and possibly WADO-RS are not really ready for adoption yet.&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;References:&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Top 13 PACS by Number of Installs, Definitive Healthcare, 2024,&amp;nbsp;&lt;a href=&quot;https://www.definitivehc.com/resources/healthcare-insights/top-PACS-number-install&quot;&gt;https://www.definitivehc.com/resources/healthcare-insights/top-PACS-number-install&lt;/a&gt;s&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;IHE Connectathon Global Results, Integrating the Healthcare Enterprise, 2025,&amp;nbsp;&lt;a href=&quot;https://connectathon-results.ihe.net/custom-search/&quot;&gt;https://connectathon-results.ihe.net/custom-search/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Outside imaging in emergency department transfer patients: CD import reduces rates of subsequent imaging utilization, PubMed,&amp;nbsp;&lt;a href=&quot;https://pubmed.ncbi.nlm.nih.gov/21507903/&quot;&gt;https://pubmed.ncbi.nlm.nih.gov/21507903/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;The Right Tools, Healthcare Standards, Keith W. Boone, 2010,&amp;nbsp;&lt;a href=&quot;https://motorcycleguy.blogspot.com/2008/12/right-tools-make-any-job-easy.html&quot;&gt;https://motorcycleguy.blogspot.com/2008/12/right-tools-make-any-job-easy.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Medical Imaging Exchange, Healthcare Standards, Keith W. Boone, 2012,&amp;nbsp;&lt;a href=&quot;https://motorcycleguy.blogspot.com/2012/01/medical-imaging-exchange.html&quot;&gt;https://motorcycleguy.blogspot.com/2012/01/medical-imaging-exchange.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Sharing Images on CD, DVD &amp;amp; USB: Standards, Tools &amp;amp; IHE PDI, IRWF and BIR Profiles, RSNAN, David Clunie, 2010, https://www.dclunie.com/papers/rsna2010_pdi_clunie.pdf&lt;/span&gt;&lt;/p&gt;&lt;p data-page=&quot;4057&quot; id=&quot;p-49&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhUO8arQY4Fwcd93XXzUP1nQOLkJVitdx2QLWoVaK4S-YORm_cUeoAs-D8uYMTYafCkjPv21QfGYAJWRDRBMbfsghj38InOuQoKu5nOP0n5yimiONZkLwB0oN_vJ8lCR50R6KUewPf0S5Wl3sxiPu-MA3Jje2HCsU55fFa2EmlxtH9flUDGT6sjWxBN8mU&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;637&quot; data-original-width=&quot;962&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhUO8arQY4Fwcd93XXzUP1nQOLkJVitdx2QLWoVaK4S-YORm_cUeoAs-D8uYMTYafCkjPv21QfGYAJWRDRBMbfsghj38InOuQoKu5nOP0n5yimiONZkLwB0oN_vJ8lCR50R6KUewPf0S5Wl3sxiPu-MA3Jje2HCsU55fFa2EmlxtH9flUDGT6sjWxBN8mU&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/383623426313558719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2026/02/astp-onc-issues-diagnostic-imaging-rfi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/383623426313558719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/383623426313558719'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2026/02/astp-onc-issues-diagnostic-imaging-rfi.html' title='ASTP / ONC issues Diagnostic Imaging RFI'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhUO8arQY4Fwcd93XXzUP1nQOLkJVitdx2QLWoVaK4S-YORm_cUeoAs-D8uYMTYafCkjPv21QfGYAJWRDRBMbfsghj38InOuQoKu5nOP0n5yimiONZkLwB0oN_vJ8lCR50R6KUewPf0S5Wl3sxiPu-MA3Jje2HCsU55fFa2EmlxtH9flUDGT6sjWxBN8mU=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-5134083536898100329</id><published>2026-01-07T09:51:00.003-05:00</published><updated>2026-01-07T09:51:18.662-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FHIR"/><category scheme="http://www.blogger.com/atom/ns#" term="HL7"/><title type='text'>HL7 V2 to FHIR</title><content type='html'>&lt;p&gt;You may have seen my guest post on Healthcare IT Today about&amp;nbsp;&lt;a href=&quot;https://www.healthcareittoday.com/2025/09/30/why-public-health-data-needs-to-modernize/&quot;&gt;Why Public Health Data needs to Modernize&lt;/a&gt;&amp;nbsp;a few months back.&amp;nbsp; I&#39;ve been working to support this for years, and in October 2025, HL7 achieved a pretty significant goal supporting that.&amp;nbsp; The &lt;a href=&quot;https://hl7.org/fhir/uv/v2mappings/STU1/&quot;&gt;HL7 Version 2 to FHIR Standard for Trial Use&lt;/a&gt; was finally published.&lt;/p&gt;&lt;p&gt;I have been working on the HL7 Version 2 to FHIR project since the initial inception in late 2018, almost at the same time as I started at Audacious Inquiry.&amp;nbsp; My first project at Audacious was to create a V2 to FHIR Converter, which we did build and provide to some of our customers.&amp;nbsp; Audacious contributed the mappings our team developed (mostly through efforts of our product owner and me, with some help from our HL7 V2 interface developers) to the project in early 2019, and they became the initial spreadsheets that were used to create the HL7 V2 to FHIR guide.&lt;/p&gt;&lt;p&gt;I now have the somewhat dubious attribute as having be an editor working on one of the longest running projects from inception to STU publication in HL7 history (7 years).&amp;nbsp; Yes, I am certain some have run longer, but none that I can think of off the top of my head.&amp;nbsp; Part of my editorial role in the early days was to have evolved the effort to represent the content in spreadsheets, and then to translate (in code), those nearly 400 spreadsheets into over 250 FHIR ConceptMap resources.&amp;nbsp; More recently, it has been maintenance of the V2 to FHIR IG generator code base, and detailed technical review of the content produced in the guide to verify that it can be accessed in computable form, not just via spreadsheets but through the FHIR Resources, and ensuring that all content is consistently handled and can be used to automatically generate a V2 to FHIR converter.&lt;/p&gt;&lt;p&gt;I&#39;m thrilled to see this finally published, and our team has been working on turning the output of this guide into a Data Modernization offering for public health that will enable them to turn legacy data into FHIR resources that can be accessed through modern APIs.&amp;nbsp; We are working on a completely new software base to support V2 and CDA to FHIR conversions we&#39;ll be talking more about at HIMSS 26.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/5134083536898100329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2026/01/hl7-v2-to-fhir.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/5134083536898100329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/5134083536898100329'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2026/01/hl7-v2-to-fhir.html' title='HL7 V2 to FHIR'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-1732166115815208894</id><published>2025-09-17T23:02:00.002-04:00</published><updated>2025-09-17T23:09:55.218-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HL7"/><category scheme="http://www.blogger.com/atom/ns#" term="HL7WGM"/><title type='text'>It&#39;s still Wednesday at the HL7WGM (barely)</title><content type='html'>&lt;p&gt;It&#39;s been too long since I&#39;ve written an HL7 Plenary Wednesday post, but if you understand the history of this blog, you know what is coming.&amp;nbsp; For rather understandable reasons, I have shifted a great deal of my focus towards implementations and standards supporting Public Health, rather than the EHR space.&amp;nbsp; Some of that has to do with what my employer Audacious Inquiry does, but other parts of that stem from seeing an unmet need that can impact people around my country, and even more so, the public health people working very hard, and on very limited budgets to keep us all healthy.&amp;nbsp; That unmet need became even more apparent as we went through COVID-19 and are still in many ways recovering from it.&lt;/p&gt;&lt;p&gt;Significant effort is underway even now to connect public health to the health information eco-system that we in HL7, IHE and other organizations have been creating for patients.&amp;nbsp; One of those efforts is to enable public health agencies to connect to that eco-system through TEFCA and national networks to make it easier, cheaper and faster to do the jobs that need to be done, and to improve the infrastructure that is long overdue for a major upgrade.&lt;/p&gt;&lt;p&gt;Over the last couple of years, I met a young leader whose team is developing tools to enable public health agencies connect to the Health Information Superhighway we have been trying to create for the past two decades. Over the past year, I worked closely with him and his team at two different FHIR Connectathon events to better enable agencies to build on-ramps to that expressway.&amp;nbsp; Through his work, I&#39;ve been able to make some on-ramps of my own that should enable public health agencies better access to their own data using a more modern infrastructure and achieve a five-year goal I set for myself back in early 2021.&lt;/p&gt;&lt;p&gt;This next recipient is someone I&#39;ve not had a chance to watch over a long period of time, nor see him grow (though I know he has even in the short time I&#39;ve known him).&amp;nbsp; He does what all good leaders do, which is to enable others to succeed, and by others, in this case, I mean me.&amp;nbsp;&amp;nbsp;We have infrequent contact, we don&#39;t really work on the same project, but where our roles intercept, he&#39;s made it possible for me achieve a significant goal. Without further ado, here&#39;s the next Ad Hoc Harley.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;For &lt;a href=&quot;https://www.linkedin.com/in/daniel-paseltiner-4487a1225/&quot; target=&quot;_blank&quot;&gt;Daniel Paseltiner&lt;/a&gt;, of Skylight&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZ54vUSfp6MDXlI5xWk3LB5_Seg0JOvZ6pu1ZIEfFyIYHUz-l6qMOnOK2SlpHOXm-oJZD6dmRZlyP6pfGIWF2kyhGEhXw1EII1VlnuIFbf0tJ1XCRkbGqvXB49wkj1GORmfG1qLX9ovaRAH3lIrUnJYVRgKK9eCCYVoWsvsFkgS0nnHHbG87SI4TGNnE8&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;178&quot; data-original-width=&quot;320&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZ54vUSfp6MDXlI5xWk3LB5_Seg0JOvZ6pu1ZIEfFyIYHUz-l6qMOnOK2SlpHOXm-oJZD6dmRZlyP6pfGIWF2kyhGEhXw1EII1VlnuIFbf0tJ1XCRkbGqvXB49wkj1GORmfG1qLX9ovaRAH3lIrUnJYVRgKK9eCCYVoWsvsFkgS0nnHHbG87SI4TGNnE8&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;b&gt;For leadership that enabled me an opportunity to nail a 5-year goal&lt;/b&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;P.S. I know this post was more about me than Dan, and for that, I&#39;m sorry.&amp;nbsp; I do wish Dan and I had more opportunities to work more closely together on a project.&amp;nbsp; To see some of the work of Dan and his team, check out the &lt;a href=&quot;https://github.com/CDCgov/dibbs-query-connector&quot; target=&quot;_blank&quot;&gt;DIBBS Query Connector project on GitHub&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/1732166115815208894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2025/09/its-still-wednesday-at-hl7wgm-barely.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/1732166115815208894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/1732166115815208894'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2025/09/its-still-wednesday-at-hl7wgm-barely.html' title='It&#39;s still Wednesday at the HL7WGM (barely)'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhZ54vUSfp6MDXlI5xWk3LB5_Seg0JOvZ6pu1ZIEfFyIYHUz-l6qMOnOK2SlpHOXm-oJZD6dmRZlyP6pfGIWF2kyhGEhXw1EII1VlnuIFbf0tJ1XCRkbGqvXB49wkj1GORmfG1qLX9ovaRAH3lIrUnJYVRgKK9eCCYVoWsvsFkgS0nnHHbG87SI4TGNnE8=s72-c" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-3181394856457145207</id><published>2025-07-09T09:30:00.006-04:00</published><updated>2025-07-09T09:30:00.121-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FHIR"/><category scheme="http://www.blogger.com/atom/ns#" term="V2toFHIR"/><title type='text'> A syntax for validating V2toFHIR Conversions</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwqlCY3XrknugNCow-kcNT4P7S-PfElP61PDjmg76cg01bEO2x5SDFlYVZnC5XbhqlYVER_87KQn1r-hCWb-bmdsKymKXd-HdwpuHsQwsxEms4Omtf3GGNFoSix6kfevO32nHYQJ6sISJ49hY5JDxpjobuPq6Zb4Mnh0k67xMObc-6t7s4iBVL-Qrb3Sk/s500/tv-test-pattern-146649_1280.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;375&quot; data-original-width=&quot;500&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwqlCY3XrknugNCow-kcNT4P7S-PfElP61PDjmg76cg01bEO2x5SDFlYVZnC5XbhqlYVER_87KQn1r-hCWb-bmdsKymKXd-HdwpuHsQwsxEms4Omtf3GGNFoSix6kfevO32nHYQJ6sISJ49hY5JDxpjobuPq6Zb4Mnh0k67xMObc-6t7s4iBVL-Qrb3Sk/s320/tv-test-pattern-146649_1280.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;I&#39;ve been working on V2toFHIR since its inception.&amp;nbsp; A month ago, and back in January I participated in two Connectathons that are using that capability from &lt;a href=&quot;https://github.com/IZGateway/v2tofhir&quot; target=&quot;_blank&quot;&gt;this code&lt;/a&gt;.&amp;nbsp; In building that engine, I needed a way to test a conversion of an HL7 message in a way that would make it easier for me to write detailed tests.&lt;p&gt;&lt;/p&gt;&lt;p&gt;The input to a test is an HL7 V2 message with segments.&amp;nbsp; A very long time ago, I resolved to use plain-text files containing messages and divide them with a blank line.&amp;nbsp; Here&#39;s an example below of a file with two messages I&#39;ve previously used for other purposes at IHE Connectathons (I have several years of IHE Connectathon test data lying about):&lt;/p&gt;&lt;div style=&quot;background-color: white; padding: 0px 0px 0px 2px;&quot;&gt;&lt;div&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;# Outbound ack:&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;MSH|^~\&amp;amp;|PAT_IDENTITY_X_REF_MGR_MISYS_TLS|ALLSCRIPTS|OTHER_IBM_BRIDGE_TLS|IBM|20090224114149-0500||ACK^A04|OpenPIXPDQ10.243.0.65.19767899354465|P|2.3.1&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;MSA|AA|0851077658473390286&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;# PIX Feed (ADT^A01)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;# Inbound feed:&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;MSH|^~\&amp;amp;|OTHER_IBM_BRIDGE_TLS|IBM|PAT_IDENTITY_X_REF_MGR_MISYS|ALLSCRIPTS|20090224104152-0600||ADT^A01^ADT_A01|8686183982575368499|P|2.3.1&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;EVN||20090224104152-0600&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;PID|||102^^^IBOT&amp;amp;1.3.6.1.4.1.21367.2009.1.2.370&amp;amp;ISO||SINGLETON^MARION||19661109|F&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;PV1||I&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;You might also note that I allow for comment characters at the start of the line. My test framework simply ignores those lines while reading the test data, and if gives me a way to identify the test case. For testing V2 to FHIR Conversions, I needed a way to create assertions that would be used to verify the assertion.&amp;nbsp; Of course, &lt;a href=&quot;https://hl7.org/fhirpath/&quot; target=&quot;_blank&quot;&gt;FHIRPath&lt;/a&gt; comes to mind because it&#39;s already an expression language widely used in FHIR itself for assertions and other manipulations of FHIR Resources.&amp;nbsp; That&#39;s ideal language for my use case.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;So, I added a capability in my test case reader to add assertions to the test case. Here&#39;s an example for the first test case above.&amp;nbsp; The @ sign introduces an assertion.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;padding: 0px 0px 0px 2px;&quot;&gt;&lt;div&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;	@MessageHeader.source.name = &quot;PAT_IDENTIFY_X_REF_MGR_MISYS_TLS&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;	@MessageHeader.source.endpoint = &quot;ALLSCRIPTS&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;	@MessageHeader.destination.name = &quot;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;OTHER_IBM_BRIDGE_TLS&lt;/span&gt;&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;	@MessageHeader.destination.endpoint = &quot;IBM&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;I&#39;m actually checking a bundle but use a little string substitution hackery to replace MessageHeader with&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3f5fbf; font-family: Consolas; font-size: 10pt; white-space: pre;&quot;&gt;%context.entry.resource.ofType(MessageHeader)&lt;/span&gt;&amp;nbsp;at the head of the expression to save me about 31 characters of typing each time.&lt;/p&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;The next bit of fun is enabling the assertions to come close to where they are useful in the message.&amp;nbsp; It should be obvious that each test case has two streams of data, the message, and the assertions.&amp;nbsp; They can easily be interwoven.&amp;nbsp; So, assertions can easily follow the segment, but I also wanted more, because some segments can be very long.&amp;nbsp; Borrowing from other scripting languages (e.g., bash), I allow the introduction of the \ character at the end of the line to allow lines to be continued.&amp;nbsp; I realized that it would be important to visually see the start an end of a segment in the file, so I ignore leading whitespace at the beginning of continuation lines.&amp;nbsp; So now I can write:&lt;/p&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;# Outbound ack:&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;MSH|^~\&amp;amp;|\&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;  PAT_IDENTITY_X_REF_MGR_MISYS_TLS|\&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;    @MessageHeader.source.name = &quot;PAT_IDENTIFY_X_REF_MGR_MISYS_TLS&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;  ALLSCRIPTS|\&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;    @MessageHeader.source.endpoint = &quot;ALLSCRIPTS&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;  OTHER_IBM_BRIDGE_TLS|\&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;    @MessageHeader.destination.name = &quot;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;OTHER_IBM_BRIDGE_TLS&lt;/span&gt;&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;  IBM|20090224114149-0500|\&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;    @MessageHeader.destination.endpoint = &quot;IBM&quot;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;  |ACK^A04|OpenPIXPDQ10.243.0.65.19767899354465|P|2.3.1&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;MSA|AA|0851077658473390286&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;br style=&quot;font-size: 13.3333px;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;And so forth.&amp;nbsp; In this way, I now have a test case where I can start with the message in my usual form (simple text with a blank line between cases).&amp;nbsp; From there I can augment the test case with assertions that I feel are important.&amp;nbsp; Following that, I can also break things up, even just long lines of V2 messages to make the test files more readable.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;The final piece of this was to allow long assertions to be broken up the same way messages are, and to steal the final comment in the assertion expression (comments are part of FHIRPath syntax) to use for my assertion message in my testing framework.&amp;nbsp; That&#39;s also just simple string substitution as well.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;You can find all of the code for this in &lt;a href=&quot;https://github.com/IZGateway/v2tofhir&quot; target=&quot;_blank&quot;&gt;V2toFHIR&lt;/a&gt;, the open-source converter my team and I created for some of our ongoing work.&amp;nbsp; The two key files of interest are &lt;a href=&quot;http://MessageParserTests.java&quot; target=&quot;_blank&quot;&gt;MessageParserTests.java&lt;/a&gt; and &lt;a href=&quot;https://github.com/IZGateway/v2tofhir/blob/main/src/test/java/test/gov/cdc/izgateway/v2tofhir/TestData.java&quot; target=&quot;_blank&quot;&gt;TestData.java&lt;/a&gt;.&amp;nbsp; The method &lt;a href=&quot;https://github.com/IZGateway/v2tofhir/blob/main/src/test/java/test/gov/cdc/izgateway/v2tofhir/TestData.java#L331&quot; target=&quot;_blank&quot;&gt;TestData.load()&lt;/a&gt; is where all the test input parsing magic happens.&amp;nbsp; It&#39;s not really that complicated.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Consolas; font-size: 10pt; margin: 0px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/3181394856457145207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2025/07/a-syntax-for-validating-v2tofhir.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/3181394856457145207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/3181394856457145207'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2025/07/a-syntax-for-validating-v2tofhir.html' title=' A syntax for validating V2toFHIR Conversions'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwqlCY3XrknugNCow-kcNT4P7S-PfElP61PDjmg76cg01bEO2x5SDFlYVZnC5XbhqlYVER_87KQn1r-hCWb-bmdsKymKXd-HdwpuHsQwsxEms4Omtf3GGNFoSix6kfevO32nHYQJ6sISJ49hY5JDxpjobuPq6Zb4Mnh0k67xMObc-6t7s4iBVL-Qrb3Sk/s72-c/tv-test-pattern-146649_1280.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-4769598520835361638</id><published>2025-06-02T09:07:00.001-04:00</published><updated>2025-06-02T09:07:18.365-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="V2toFHIR"/><title type='text'>Code generators need not be perfect</title><content type='html'>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;i lang=&quot;fr&quot; style=&quot;background-color: white; color: #202122; font-family: sans-serif; font-size: 16px;&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: right;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhIQgQfLe34yVqO4ySP5Ya4KjSskx_3K-TliK5uoNuXtNTcV1B2eshSm4cfFmM7nZH6jcnhnFc-cbqvr632ZAVRVutPJd-OKNdHPS_RGXelpFHad6Cwu2dD19nbbtou6efvq534py0R1DJ97tEXkXZRID7VuuQoFoKx2MCT968cfglPGxECdC9qspoBccs&quot; style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;251&quot; data-original-width=&quot;201&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhIQgQfLe34yVqO4ySP5Ya4KjSskx_3K-TliK5uoNuXtNTcV1B2eshSm4cfFmM7nZH6jcnhnFc-cbqvr632ZAVRVutPJd-OKNdHPS_RGXelpFHad6Cwu2dD19nbbtou6efvq534py0R1DJ97tEXkXZRID7VuuQoFoKx2MCT968cfglPGxECdC9qspoBccs&quot; width=&quot;192&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;i lang=&quot;fr&quot; style=&quot;color: #202122; font-size: 16px;&quot;&gt;Le mieux est le mortel &lt;br /&gt;ennemi&amp;nbsp;du bien. -- Voltaire&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;I&#39;ve been working on expanding the &lt;a href=&quot;https://github.com/IZGateway/v2tofhir&quot; target=&quot;_blank&quot;&gt;v2tofhir code&lt;/a&gt; that &lt;a href=&quot;https://ainq.com&quot; target=&quot;_blank&quot;&gt;Audacious Inquiry&lt;/a&gt; developed for one of our projects into a broader offering for public health that handles more than just Immunization messages.&amp;nbsp; That&#39;s not going back into the original open-source work, as it is not within the scope of that program. But it is going to become an application available to our customers.&amp;nbsp;&lt;a href=&quot;https://outlook.office.com/bookwithme/user/6a8ed4fdd20c49eebef8733e1e173fb9@pointclickcare.com/meetingtype/8hFhHPBYO0iDH1Aff6J--A2?anonymous&amp;amp;ismsaljsauthenabled&quot; target=&quot;_blank&quot;&gt;Contact me if you want to learn more&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;One thing I relearned from my &lt;a href=&quot;https://x.com/search?q=%22vibe%20coding%22%20AND%20(from%3Amotorcycle_guy)&amp;amp;src=typed_query&amp;amp;f=top&quot;&gt;vibe coding session with Copilot&lt;/a&gt; is that code generators don&#39;t have to be perfect -- although it certainly helps if they are.&amp;nbsp; I already know from years of experience working with natural language processing is that heuristics can often get you most of the way there, and specialized exception handling can handle what the heuristic doesn&#39;t.&lt;/p&gt;&lt;p&gt;By putting these two ideas together I can successfully generate code for the 2700+ mapping rules in the current&amp;nbsp;&lt;a href=&quot;https://build.fhir.org/ig/HL7/v2-to-fhir/&quot; target=&quot;_blank&quot;&gt;HL7 V2 to FHIR&lt;/a&gt; specification in just minutes.&amp;nbsp; &amp;nbsp;This makes my code generator immediately effective to support the 75 or so segment mapping tables supported by that specification. With a few minutes, I can generate code to support every segment, and within a few hours more, can correct all of the missing bits.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The compiler is a perfect tool for detecting the exception cases. Like a canary in a coal mine, it is especially sensitive to danger. The code generator I&#39;m still developing has been an excellent QA resource for the HL7 V2 to FHIR spec, as it enables me to verify content in the spec.&amp;nbsp; Some errors in the generated output are actually caused by typos in the over 10000 lines of CSV data that is used to generate the HL7 standard.&lt;/p&gt;&lt;p&gt;This is a tremendous lift for development, and as we figure out the patterns of errors, we can easily augment the code generator to fix them.&amp;nbsp; While that&#39;s being done, we still have code that we can tweak to perfection in much less time than it takes to generate it manually.&amp;nbsp; It also reduces the amount of SME expertise needed to create the application.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The original open-source code took a more manual approach to automation (I was actually trying to figure out the process in using spreadsheets).&amp;nbsp; It took about 3 months of work to handle about 20 segments.&amp;nbsp; Easily half of that was putting together the surrounding infrastructure rather than parsing individual segments.&amp;nbsp; The code generator took about a week to build.&amp;nbsp; It gets very close to final code for 75 segments.&amp;nbsp; These leave me about 40-50 errors to resolve, most of which are simple.&amp;nbsp; I&#39;m expecting another week or two will be needed to handle those issues in the generated code.&amp;nbsp; This is easily an order of magnitude improvement. It can be repeated on new editions of the V2 to FHIR outputs much faster than fixing the code by hand, which also speeds up maintenance.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/4769598520835361638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2025/06/code-generators-need-not-be-perfect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/4769598520835361638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/4769598520835361638'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2025/06/code-generators-need-not-be-perfect.html' title='Code generators need not be perfect'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhIQgQfLe34yVqO4ySP5Ya4KjSskx_3K-TliK5uoNuXtNTcV1B2eshSm4cfFmM7nZH6jcnhnFc-cbqvr632ZAVRVutPJd-OKNdHPS_RGXelpFHad6Cwu2dD19nbbtou6efvq534py0R1DJ97tEXkXZRID7VuuQoFoKx2MCT968cfglPGxECdC9qspoBccs=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-733074358901582680.post-119211001610839817</id><published>2025-04-30T17:53:00.005-04:00</published><updated>2025-04-30T17:53:52.068-04:00</updated><title type='text'>Two Guys in a Garage</title><content type='html'>COVID-19 impacted many things in a bad way but also had some beneficial impacts on Public Health infrastructure and adjoining technologies.  This long overdue post recognizes a small team whose impact on Public Health data has been tremendous.  In my work on IZ Gateway, I was first introduced to these two entrepreneurs, almost literally two guys in a garage, who had developed a wicked cool application.  While I cannot personally benefit from this application today, my brother and his family live in a state where, because of this application, they can access their immunization data directly from the New Jersey IIS.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;I got to work with this team a couple of years ago at a demonstration of the IZ Gateway and their application, and on the last day of the Interoperability Showcase, I got to be the demonstrator pitching what this application does to the showcase audience. The application they have built is truly an engine for change.

This Ad Hoc Harley goes to two guys, Michael Perretta and Nathan Scott, founders of Docket, who have truly shown what can be done with the right vision and skills.  



&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;b&gt;This Certifies that&lt;br /&gt;&lt;/b&gt;&lt;h3&gt;&lt;b&gt;Michael Perretta and Nathan Scott&lt;/b&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgxj3lT2G9DUM9FWujmEwN3_kg_habPzZ7ZG4ZdTZNT5eDHTJqGYryymuLcrjvWz1JcYrNzmvNWqWywFCWkQKw13z0UL0JWgSyBLa1Sg66_CPk4_FWCsCM7dnlkHNMQXd4KaYFYlD1s8ZKsDFvBxY1AjVdyp_g7_t9R3o8dv_B6UuJplQSnifoXDgwa6Fo&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;178&quot; data-original-width=&quot;320&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgxj3lT2G9DUM9FWujmEwN3_kg_habPzZ7ZG4ZdTZNT5eDHTJqGYryymuLcrjvWz1JcYrNzmvNWqWywFCWkQKw13z0UL0JWgSyBLa1Sg66_CPk4_FWCsCM7dnlkHNMQXd4KaYFYlD1s8ZKsDFvBxY1AjVdyp_g7_t9R3o8dv_B6UuJplQSnifoXDgwa6Fo&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;Have been hereby recognized for being engines of change in Public Health&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Imagine riding with this engine under your seat.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDP9fg0SVaMKgBRJmsicsfkDgsrZ1hJulvy1mSs-InKc3rh4zll7jMeFqSY2g8eJFslw-mkekeJcTEx-IH2NRCCs6I_eYdRdMh_B1L3pBeNJplSrK0lVCZLj7RKboFbS7G6R2U1TX3nK7jnJzxz-AEv16HAJ-yQL8iOe2uBMbdWTvI83o-F3d_ydm5jdg/s640/IMG_0545.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;640&quot; height=&quot;288&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDP9fg0SVaMKgBRJmsicsfkDgsrZ1hJulvy1mSs-InKc3rh4zll7jMeFqSY2g8eJFslw-mkekeJcTEx-IH2NRCCs6I_eYdRdMh_B1L3pBeNJplSrK0lVCZLj7RKboFbS7G6R2U1TX3nK7jnJzxz-AEv16HAJ-yQL8iOe2uBMbdWTvI83o-F3d_ydm5jdg/s320/IMG_0545.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://motorcycleguy.blogspot.com/feeds/119211001610839817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://motorcycleguy.blogspot.com/2025/04/two-guys-in-garage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/119211001610839817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/733074358901582680/posts/default/119211001610839817'/><link rel='alternate' type='text/html' href='http://motorcycleguy.blogspot.com/2025/04/two-guys-in-garage.html' title='Two Guys in a Garage'/><author><name>Keith W. Boone</name><uri>http://www.blogger.com/profile/16883038460949909300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgxj3lT2G9DUM9FWujmEwN3_kg_habPzZ7ZG4ZdTZNT5eDHTJqGYryymuLcrjvWz1JcYrNzmvNWqWywFCWkQKw13z0UL0JWgSyBLa1Sg66_CPk4_FWCsCM7dnlkHNMQXd4KaYFYlD1s8ZKsDFvBxY1AjVdyp_g7_t9R3o8dv_B6UuJplQSnifoXDgwa6Fo=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry></feed>