<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged bioinformatics</title>
<link>https://coderlegion.com/tag/bioinformatics</link>
<description>Powered by Question2Answer</description>
<item>
<title>qodon - a CLI based genomics tool</title>
<link>https://coderlegion.com/28461/qodon-a-cli-based-genomics-tool</link>
<description>&lt;h2 id=&quot;qodon-qdn-&quot;&gt;qodon (qdn) 🧬&lt;/h2&gt;
&lt;h3 id=&quot;a-command-line-genomics-tool-written-in-c&quot;&gt;A Command Line Genomics tool. Written in C&lt;/h3&gt;
&lt;p&gt;qodon (invoked as &lt;code&gt;qdn&lt;/code&gt;) is an ultra-fast, lightweight command-line utility for quick genomic sequence manipulations. Written in pure C, it processes sequence arguments natively at bare-metal speeds, making it perfect for rapid testing, scripting, and pipeline integration. &lt;/p&gt;
&lt;h4 id=&quot;-features&quot;&gt;✨ Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero Overhead:&lt;/strong&gt; Built in standard C for maximum execution velocity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dual-Mode Engine:&lt;/strong&gt; Run quick one-off commands from your terminal or drop into a stateful interactive shell context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instant Evaluation:&lt;/strong&gt; High-performance byte manipulation for zero-lag sequence transformations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Core Bio-Utilities:&lt;/strong&gt; Fast sequence transcription, complementing, reversing, and metric calculations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-installation&quot;&gt;🚀 Installation&lt;/h3&gt;
&lt;p&gt;You can install &lt;code&gt;qodon&lt;/code&gt; directly or build from the source code. &lt;/p&gt;
&lt;h4 id=&quot;1-direct-install-linux-x86-64-&quot;&gt;1. Direct Install (Linux, x86_64)&lt;/h4&gt;
&lt;p&gt;Install precompiled binaries by running: &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -L -o qdn https://github.com/Temi-Tade/qodon/releases/download/v0.2.0/qdn &amp;amp;&amp;amp; chmod +x qdn &amp;amp;&amp;amp; sudo mv qdn /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;2-build-from-source&quot;&gt;2. Build from source&lt;/h4&gt;
&lt;p&gt;Compile &lt;code&gt;qdn&lt;/code&gt; natively using any modern C compiler (&lt;code&gt;gcc&lt;/code&gt; or &lt;code&gt;clang&lt;/code&gt; required): &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone the repository
git clone https://github.com/Temi-Tade/qodon.git
cd qodon

# Compile the binary with optimizations
gcc src/main.c -O3 src/lib/qodon.c src/lib/shell.c -o bin/qdn

# Move to your local bin to run it globally
sudo mv qdn /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;
&lt;h4 id=&quot;-mode-1-interactive-context-shell&quot;&gt;🐚 Mode 1: Interactive Context Shell&lt;/h4&gt;
&lt;p&gt;Launch &lt;code&gt;qdn&lt;/code&gt; with the &lt;code&gt;-i&lt;/code&gt; flag followed by a target sequence to open the interactive context shell. The sequence is loaded directly into the session's workspace memory, allowing you to run rapid back-to-back operations against that specific strand without retyping it. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ qdn -i ATGCATGC
Entering qodon shell...
Template sequence: ATGCATGC 
Length: 8bps 
GC content: 50.00%
qdn&amp;gt; len
8bps
qdn&amp;gt; cmp
ATGCATGC (Template strand)
||||||||
TACGTACG (Complementary strand)
qdn&amp;gt; gc
50.00%
qdn&amp;gt; rev
ATGCATGC (FWD)
CGTACGTA (REV)
qdn&amp;gt; exit
$
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;available-shell-commands&quot;&gt;Available Shell Commands&lt;/h4&gt;
&lt;p&gt;Inside the shell, execute operations directly on the initialized sequence: &lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Command &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Action &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Description&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;cmp&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Complement &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Generates the complementary DNA/RNA strand&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;tr&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Transcribe &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Transcribes DNA to RNA (converts T to U)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;rt&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Reverse Transcribe &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Reverse transcribes RNA to DNA (converts U to T)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;rev&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Reverse &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Reverses the sequence direction&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;len&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Length &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Computes the total length of the sequence&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;gc&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;GC-Content &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Calculates the exact GC content percentage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;exit&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Exit &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Closes the interactive shell session&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;-mode-2-quick-terminal-flags&quot;&gt;🛠️ Mode 2: Quick Terminal Flags&lt;/h4&gt;
&lt;p&gt;For quick one-offs or integration into larger bash scripts, pass an operational flag followed by your target nucleotide sequence string directly to your terminal: &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdn [flag] &amp;lt;SEQUENCE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;core-flag-operations&quot;&gt;Core Flag Operations&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Flag &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Shell Command &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Action &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Description&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;-c&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;cmp &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Complement &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Generates the complementary DNA/RNA strand&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;-t&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;tr &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Transcribe &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Transcribes DNA to RNA (converts T to U)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;-u&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;rt &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Reverse Transcribe &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Reverse transcribes RNA to DNA (converts U to T)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;-l&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;len &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Length &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Computes the total length of the sequence&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;-g&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;gc &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;GC-Content &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Calculates the GC content percentage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;-i&lt;/strong&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Shell Mode &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Enter interactive shell&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;-one-off-examples&quot;&gt;💻 One-off Examples&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Get Complementary Strand:&lt;/strong&gt; &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdn -c ATGC
# Output: TACG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Transcribe DNA to RNA:&lt;/strong&gt; &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdn -t GATTACA
# Output: CUAAUGU
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Reverse Transcribe RNA to DNA&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdn -u UUAGC
# Output: AATCG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Calculate GC Content:&lt;/strong&gt; &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdn -g CCGGTT
# Output: 66.67%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Get Sequence Length:&lt;/strong&gt; &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdn -l ATGCATGC
# Output: 8bps
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;-license&quot;&gt;📄 License&lt;/h4&gt;
&lt;p&gt;This project is licensed under the MIT License. &lt;/p&gt;
</description>
<category>Launches</category>
<guid isPermaLink="true">https://coderlegion.com/28461/qodon-a-cli-based-genomics-tool</guid>
<pubDate>Thu, 24 Sep 2026 10:22:41 +0000</pubDate>
</item>
<item>
<title>Predicting Drug-Drug Interactions with Hypergraphs — on Two CPU Cores</title>
<link>https://coderlegion.com/27074/predicting-drug-drug-interactions-with-hypergraphs-on-two-cpu-cores</link>
<description>&lt;p&gt;When a patient takes several medications at once, two of them can interact in ways that cause real harm. DrugBank catalogues 86 distinct mechanisms for how this happens — one drug slowing another's metabolism, increasing its toxicity, blunting its effect, and so on. Screening every pair by hand does not scale.&lt;/p&gt;
&lt;p&gt;Most machine learning approaches to this problem split it in two: one model decides &lt;em&gt;whether&lt;/em&gt; two drugs interact, a completely separate one decides &lt;em&gt;how&lt;/em&gt;. That split is convenient for benchmarking and awkward for anything practical.&lt;/p&gt;
&lt;p&gt;We built &lt;strong&gt;H²GNN&lt;/strong&gt; to do both in one hierarchy, using nothing but SMILES strings as input. The code is now public, and the whole thing runs on two CPU cores.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Hu8MA/HHGNN&quot;&gt;github.com/Hu8MA/HHGNN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paper:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://doi.org/10.1109/ECAI69016.2026.11613729&quot;&gt;ECAI 2026, IEEE Xplore&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-hypergraphs&quot;&gt;Why hypergraphs&lt;/h3&gt;
&lt;p&gt;In an ordinary graph, an edge joins exactly two nodes. That is a poor fit for a lot of chemistry. A molecular substructure is not a relationship between two drugs — it is something that dozens of drugs share simultaneously. An interaction mechanism is not a property of one pair; it is a category that hundreds of pairs fall into.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;hyperedge&lt;/strong&gt; can connect any number of nodes at once, which lines up with both of those facts. H²GNN uses two hypergraphs stacked on top of each other.&lt;/p&gt;
&lt;h4 id=&quot;stage-1-the-chemical-hypergraph&quot;&gt;Stage 1: the chemical hypergraph&lt;/h4&gt;
&lt;p&gt;Take a SMILES string and slide a window of size &lt;em&gt;k&lt;/em&gt; across it. Each window is a substring — a rough proxy for a local chemical arrangement. Every distinct substring becomes a &lt;strong&gt;node&lt;/strong&gt;, and every drug becomes a &lt;strong&gt;hyperedge&lt;/strong&gt; connecting the substrings it contains.&lt;/p&gt;
&lt;p&gt;At &lt;code&gt;k = 9&lt;/code&gt;, that gives 29,462 substructure nodes, 1,709 drug hyperedges, and 96,656 connections between them.&lt;/p&gt;
&lt;p&gt;A single hypergraph attention layer runs over this structure. Attention flows at the hyperedge level, then the node level, and the result is a 128-dimensional embedding per drug learned end to end from raw SMILES. An MLP decoder takes the embeddings of two drugs and predicts whether they interact.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result: 98.46% ROC-AUC, 93.20% accuracy.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For comparison, a Random Forest on 4,096-dimensional Morgan fingerprints gets 88% ROC-AUC. A two-layer GCN gets 95%.&lt;/p&gt;
&lt;h4 id=&quot;stage-2-the-interaction-type-hypergraph&quot;&gt;Stage 2: the interaction-type hypergraph&lt;/h4&gt;
&lt;p&gt;Here is the part I find most interesting, and it is a small conceptual shift with a large effect.&lt;/p&gt;
&lt;p&gt;The obvious way to classify interaction mechanisms is to attach a label to each drug pair and train a classifier. We did something else: &lt;strong&gt;each of the 86 interaction types becomes a hyperedge&lt;/strong&gt;, connecting every drug that participates in that type. Drugs are the nodes. The type stops being a label on the data and becomes an object in the graph with its own learned representation.&lt;/p&gt;
&lt;p&gt;This hypergraph is tiny — 1,709 drug nodes, 86 type hyperedges, 13,486 connections. Hyperedge sizes range wildly: type 42 touches 5 drugs, type 49 touches 1,308.&lt;/p&gt;
&lt;p&gt;Drug nodes are initialized with the embeddings transferred from Stage 1, not randomly. Attention then flows hyperedge → node → hyperedge, so the type hyperedges — which are the prediction target — end up holding the final aggregated representation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result: 85.73% Top-1 and 98.11% Top-3 accuracy across 86 classes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That twelve-point gap between Top-1 and Top-3 is itself useful. The correct mechanism is almost always among the top three even when it is not ranked first, which is exactly what you want if a clinician is reading the output rather than a downstream script.&lt;/p&gt;
&lt;h3 id=&quot;the-ablations-that-mattered&quot;&gt;The ablations that mattered&lt;/h3&gt;
&lt;p&gt;Two experiments did more to convince me the design was right than any headline number.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attention direction.&lt;/strong&gt; Stage 2's drug nodes start out well-informed, carrying transferred chemical knowledge, while the type hyperedges start from one-hot vectors. So it seemed plausible that flowing attention from the informed side — node → hyperedge → node — would work better.&lt;/p&gt;
&lt;p&gt;It does not. It falls apart:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Configuration &lt;/th&gt;&lt;th&gt;Top-1 Acc. &lt;/th&gt;&lt;th&gt;PR-AUC &lt;/th&gt;&lt;th&gt;Macro F1&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;hyperedge → node → hyperedge &lt;/td&gt;&lt;td&gt;85.73% &lt;/td&gt;&lt;td&gt;87.24% &lt;/td&gt;&lt;td&gt;81%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;node → hyperedge → node &lt;/td&gt;&lt;td&gt;67.42% &lt;/td&gt;&lt;td&gt;63.54% &lt;/td&gt;&lt;td&gt;48%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Aligning the attention flow with the prediction target beats starting from the richer initialization, and the rare classes are the first thing you lose. The type hyperedge has to be where aggregation ends.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Embedding transfer.&lt;/strong&gt; Replace the transferred Stage 1 embeddings with an all-ones vector and hold everything else fixed:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Initialization &lt;/th&gt;&lt;th&gt;Top-1 Acc. &lt;/th&gt;&lt;th&gt;PR-AUC &lt;/th&gt;&lt;th&gt;Weighted F1&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Stage 1 embeddings &lt;/td&gt;&lt;td&gt;85.73% &lt;/td&gt;&lt;td&gt;87.24% &lt;/td&gt;&lt;td&gt;86%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;All-ones vector &lt;/td&gt;&lt;td&gt;82.52% &lt;/td&gt;&lt;td&gt;85.70% &lt;/td&gt;&lt;td&gt;82%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A 3.21-point drop. The hierarchy earns its keep.&lt;/p&gt;
&lt;p&gt;There is also a third result I did not expect. During cleaning, 406 drug pairs turned out to carry more than one interaction type; we kept the first and set the others aside. The model never saw those secondary labels for those pairs. It surfaced &lt;strong&gt;94.7% of them&lt;/strong&gt; within its Top-3 predictions anyway — meaning the hypergraph learned something about multi-mechanistic pharmacology rather than memorizing one label per pair.&lt;/p&gt;
&lt;h3 id=&quot;the-efficiency-story&quot;&gt;The efficiency story&lt;/h3&gt;
&lt;p&gt;This is the part that surprised me most, and it is worth spelling out for anyone who assumes graph learning implies a GPU budget.&lt;/p&gt;
&lt;p&gt;Everything above was trained and evaluated on &lt;strong&gt;Google Colab's free tier&lt;/strong&gt;: two vCPUs, no GPU. We chose it deliberately, for two reasons. It gives every run an identical environment, and its resource ceiling is close to the hardware actually available in a hospital pharmacy.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Model &lt;/th&gt;&lt;th&gt;Training time &lt;/th&gt;&lt;th&gt;Hardware&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Interaction-Type HGNN (ours, 1 layer) &lt;/td&gt;&lt;td&gt;18.6 min &lt;/td&gt;&lt;td&gt;CPU, 2 cores&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;GCN (2 layers) &lt;/td&gt;&lt;td&gt;75.6 min &lt;/td&gt;&lt;td&gt;GPU (T4)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;GraphSAGE (2 layers) &lt;/td&gt;&lt;td&gt;148.5 min &lt;/td&gt;&lt;td&gt;GPU (T4)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;XGBoost &lt;/td&gt;&lt;td&gt;225.6 min &lt;/td&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Four to twelve times faster — and it still beat GraphSAGE, the strongest baseline, by 4.8 points of Top-1 accuracy and 22 points of macro F1.&lt;/p&gt;
&lt;p&gt;The baselines had advantages we did not give ourselves: precomputed Morgan fingerprints as input features, and inverse-frequency class weighting during training to stay stable under the severe class imbalance. Single-layer variants of the GCN and GraphSAGE did not converge at all; both had to be deepened and moved to GPU for the comparison to run. A Graph Attention Network never converged and was dropped.&lt;/p&gt;
&lt;p&gt;Peak RAM increase during training: 0.29 GB.&lt;/p&gt;
&lt;h3 id=&quot;what-is-in-the-repo&quot;&gt;What is in the repo&lt;/h3&gt;
&lt;p&gt;The dataset is DrugBank — 1,709 drugs, 191,877 unique interaction pairs, 86 types, built by merging two benchmark sources so that every drug has a SMILES string.&lt;/p&gt;
&lt;p&gt;Everything needed to reproduce the numbers is there:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Colab notebooks for all 48 experiments, with inline outputs&lt;/li&gt;
&lt;li&gt;Pre-computed k-mer files for k = 3, 6, 9, 12&lt;/li&gt;
&lt;li&gt;Hypergraph structure files and index maps&lt;/li&gt;
&lt;li&gt;The exact seeded train/validation/test partitions, verified for zero leakage&lt;/li&gt;
&lt;li&gt;Baseline notebooks (GCN, GAT, GraphSAGE, XGBoost, Random Forest)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Open a notebook, point it at the data files, run all cells. Free tier is enough.&lt;/p&gt;
&lt;h3 id=&quot;what-it-does-not-do&quot;&gt;What it does not do&lt;/h3&gt;
&lt;p&gt;Being honest about the boundaries, since these are the interesting problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;SMILES only.&lt;/strong&gt; No protein-target, pathway, or side-effect information. Chemical structure carries the entire representation. Additional modalities could enter as further hyperedge families.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No severity prediction.&lt;/strong&gt; The model reports the mechanism and its likelihood, not how bad the reaction will be — which is often the thing that actually drives a clinical decision.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1,709 drugs.&lt;/strong&gt; DrugBank now holds over 4,000, so plenty of approved drugs cannot yet be screened.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pairs only.&lt;/strong&gt; Real polypharmacy is not pairwise. The hypergraph formulation could express simultaneous multi-drug combinations directly; we just have not done it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That last one bothers me the most, because the machinery is already there. A hyperedge over three co-administered drugs is a perfectly natural object in this framework.&lt;/p&gt;
&lt;p&gt;If any of these interest you, contributions are welcome — there is a contributing guide in the repo, and the issue tracker is open.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Hu8MA/HHGNN&quot;&gt;github.com/Hu8MA/HHGNN&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Paper:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://doi.org/10.1109/ECAI69016.2026.11613729&quot;&gt;Hierarchical Hypergraph Neural Networks for Multi-Type Drug–Drug Interaction Prediction&lt;/a&gt;, ECAI 2026, IEEE Xplore&lt;/p&gt;
&lt;p&gt;Thanks to the DrugBank Foundation for access to the curated drug data that made the dataset complete.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27074/predicting-drug-drug-interactions-with-hypergraphs-on-two-cpu-cores</guid>
<pubDate>Sun, 13 Sep 2026 18:32:27 +0000</pubDate>
</item>
<item>
<title>Open-Sourcing a 6-Tool Bio-Robotics &amp; Bionics MCP Server (v1.0.0)</title>
<link>https://coderlegion.com/22789/open-sourcing-a-6-tool-bio-robotics-bionics-mcp-server-v1-0-0</link>
<description>&lt;p&gt;We just officially open-sourced &lt;strong&gt;&lt;code&gt;seosiri-biorobotics&lt;/code&gt; v1.0.0&lt;/strong&gt;, a stateless, local-first Model Context Protocol (MCP) server designed to bridge the integration gap between biological datasets and physical robotic actuators.&lt;/p&gt;
&lt;h3 id=&quot;-the-architecture-decoupling-intent-from-actuation&quot;&gt;🛠️ The Architecture: Decoupling Intent from Actuation&lt;/h3&gt;
&lt;p&gt;Standard laboratory automation is heavily fragmented. Biologists use genomic databases, while mechanical engineers program robotics via proprietary vendor-locked scripts. &lt;/p&gt;
&lt;p&gt;Our system decouples these layers completely:&lt;br&gt;
&lt;code&gt;[Raw Bio-Data / EMG Input] ──► [MCP Server] ──► [Deterministic Math Core] ──► [G-code Serial Stream]&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The Context Broker (MCP):&lt;/strong&gt; Connects to the live UniProt REST API, with a local-first &lt;strong&gt;SQLite database cache (&lt;code&gt;local_db.py&lt;/code&gt;)&lt;/strong&gt; to ensure offline autonomy and bypass network latency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Math Core (&lt;code&gt;core_math.py&lt;/code&gt;):&lt;/strong&gt; Converts biological parameters to metric displacement vectors in SI units (meters).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Hardware Gateway (&lt;code&gt;hardware_gateway.py&lt;/code&gt;):&lt;/strong&gt; Translates coordinates into standard Cartesian G-code (&lt;code&gt;G1 X[Value] F1500&lt;/code&gt;) used globally by CNC gantries and motor controllers.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;-the-6-tool-suite-live-tested-&quot;&gt;📦 The 6-Tool Suite (Live-Tested)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fetch_genomic_data&lt;/code&gt;: Queries sequence parameters (with automated SQLite database caching).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resolve_biotech_spatial_intent&lt;/code&gt;: Translates concentration inputs into metric space coordinates.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map_plate_coordinate&lt;/code&gt;: Maps alphanumeric well IDs to standard 96-well plate offsets in millimeters.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;calculate_pipetting_speed&lt;/code&gt;: Calibrates feedrates and delays based on fluid viscosity (cP).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;calculate_dna_melting_temp&lt;/code&gt;: Evaluates GC-content and melting temperature (Tm) to recommend deck-bed heating offsets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;translate_emg_to_actuation&lt;/code&gt;: Translates human surface EMG microvolt biosignals into safe joint angles with active spasm protection.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-try-it-zero-install-required-&quot;&gt;🚀 Try It (Zero Install Required)&lt;/h3&gt;
&lt;p&gt;The project is officially listed on the Glama.ai directory, with verified A-grade license and maintenance scores. You can run the entire 6-tool suite inside their web-based sandbox inspector directly, with no local setup required.&lt;/p&gt;
&lt;p&gt;Read our deep-dive architectural analysis and access the open-source codebase:&lt;br&gt;
👉 &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.seosiri.com/2026/07/seosiri-bio-robotics-core-engine.html&quot;&gt;https://www.seosiri.com/2026/07/seosiri-bio-robotics-core-engine.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We would highly appreciate your technical feedback, PRs, and system reviews!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/22789/open-sourcing-a-6-tool-bio-robotics-bionics-mcp-server-v1-0-0</guid>
<pubDate>Thu, 16 Jul 2026 05:53:56 +0000</pubDate>
</item>
<item>
<title>How I Redesigned a Thermostable Enzyme with ProteinMPNN, Validated with AlphaFold2</title>
<link>https://coderlegion.com/21915/how-i-redesigned-a-thermostable-enzyme-with-proteinmpnn-validated-with-alphafold2</link>
<description>&lt;p&gt;&lt;strong&gt;E155 and E215 at 6.03 Å&lt;/strong&gt; - exactly the nucleophile/acid-base separation &lt;br&gt;
expected for a GH5 retaining endoglucanase.&lt;/p&gt;
&lt;p&gt;This step matters. If I had accepted the literature numbering without checking, I would have fixed the wrong residues and the constrained run would be biologically &lt;br&gt;
meaningless.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-2-b-factor-profile&quot;&gt;Step 2: B-factor profile&lt;/h3&gt;
&lt;p&gt;Before running ProteinMPNN, I computed per-residue B-factors to identify &lt;br&gt;
flexibility hotspots - regions that might benefit most from redesign:&lt;/p&gt;
&lt;p&gt;High-flexibility regions (B &amp;gt; 30 Å²):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Residues 246–250: B-factor up to &lt;strong&gt;96.85 Å²&lt;/strong&gt; - extremely mobile surface loop&lt;/li&gt;
&lt;li&gt;N-terminus (residues 1–3)&lt;/li&gt;
&lt;li&gt;Loop 169–173&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are the regions where ProteinMPNN has the most freedom and where &lt;br&gt;
thermostabilising mutations would be most impactful in a follow-up study.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-3-proteinmpnn---unconstrained-run&quot;&gt;Step 3: ProteinMPNN - unconstrained run&lt;/h3&gt;
&lt;p&gt;First I ran ProteinMPNN without any constraints to understand what sequences it naturally prefers for this backbone:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python protein_mpnn_run.py \
    --pdb_path cel5a_clean.pdb \
    --out_folder mpnn_output/temp_0.1 \
    --num_seq_per_target 100 \
    --sampling_temp 0.1 \
    --seed 42
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Five temperatures (0.1, 0.2, 0.3, 0.5, 0.8), 100 sequences each = 500 total.&lt;/p&gt;
&lt;p&gt;The result was surprising: at T=0.1, ProteinMPNN placed &lt;strong&gt;Threonine at E155 &lt;br&gt;
(93/100 sequences)&lt;/strong&gt; and &lt;strong&gt;Alanine at E215 (97/100 sequences)&lt;/strong&gt;. Both catalytic glutamates were replaced with non-catalytic residues.&lt;/p&gt;
&lt;p&gt;This is not a bug - it's the correct behaviour. ProteinMPNN optimises for backbone fit, not biological function. Threonine and alanine may pack better against the local structure than glutamate, but they cannot perform the retaining mechanism. This finding motivates the constrained run.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-4-proteinmpnn---catalytic-constrained-run&quot;&gt;Step 4: ProteinMPNN - catalytic-constrained run&lt;/h3&gt;
&lt;p&gt;Fix E155 and E215, let everything else vary:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;fixed_positions = {
    &quot;cel5a_clean&quot;: {
        &quot;A&quot;: [155, 215]
    }
}
with open(&quot;fixed_positions.jsonl&quot;, &quot;w&quot;) as f:
    f.write(json.dumps(fixed_positions) + &quot;\n&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python protein_mpnn_run.py \
    --pdb_path cel5a_clean.pdb \
    --fixed_positions_jsonl fixed_positions.jsonl \
    --num_seq_per_target 100 \
    --sampling_temp 0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Results:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Temperature &lt;/th&gt;&lt;th&gt;Mean score &lt;/th&gt;&lt;th&gt;Mean recovery &lt;/th&gt;&lt;th&gt;E155 preserved &lt;/th&gt;&lt;th&gt;E215 preserved&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0.1 &lt;/td&gt;&lt;td&gt;0.763 &lt;/td&gt;&lt;td&gt;52.6% &lt;/td&gt;&lt;td&gt;100% &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0.2 &lt;/td&gt;&lt;td&gt;0.788 &lt;/td&gt;&lt;td&gt;52.1% &lt;/td&gt;&lt;td&gt;100% &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0.3 &lt;/td&gt;&lt;td&gt;0.830 &lt;/td&gt;&lt;td&gt;51.5% &lt;/td&gt;&lt;td&gt;100% &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0.5 &lt;/td&gt;&lt;td&gt;0.983 &lt;/td&gt;&lt;td&gt;49.1% &lt;/td&gt;&lt;td&gt;100% &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0.8 &lt;/td&gt;&lt;td&gt;1.369 &lt;/td&gt;&lt;td&gt;43.1% &lt;/td&gt;&lt;td&gt;100% &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;100% catalytic preservation at all temperatures.&lt;/strong&gt; And the score distributions are nearly identical to the unconstrained run - fixing 2 out of 605 residues costs essentially nothing in terms of backbone fit.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-5-alphafold2-validation&quot;&gt;Step 5: AlphaFold2 validation&lt;/h3&gt;
&lt;p&gt;Top 20 constrained designs (lowest MPNN score, T=0.1) were folded using &lt;br&gt;
ColabFold on a free T4 GPU:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;colabfold_batch \
  top20_constrained_candidates.fasta \
  af2_structures/designs \
  --model-type alphafold2_ptm \
  --num-recycle 3 \
  --msa-mode single_sequence
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also folded the wildtype under identical conditions as a baseline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result: 20/20 designs beat wildtype pLDDT.&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Design &lt;/th&gt;&lt;th&gt;MPNN score &lt;/th&gt;&lt;th&gt;AF2 pLDDT &lt;/th&gt;&lt;th&gt;delta pLDDT vs WT&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;CEL5A_FIXED_013 &lt;/td&gt;&lt;td&gt;0.7532 &lt;/td&gt;&lt;td&gt;46.04 &lt;/td&gt;&lt;td&gt;&lt;strong&gt;+12.71&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CEL5A_FIXED_012 &lt;/td&gt;&lt;td&gt;0.7513 &lt;/td&gt;&lt;td&gt;45.69 &lt;/td&gt;&lt;td&gt;+12.37&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CEL5A_FIXED_014 &lt;/td&gt;&lt;td&gt;0.7535 &lt;/td&gt;&lt;td&gt;45.61 &lt;/td&gt;&lt;td&gt;+12.29&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CEL5A_FIXED_010 &lt;/td&gt;&lt;td&gt;0.7508 &lt;/td&gt;&lt;td&gt;44.48 &lt;/td&gt;&lt;td&gt;+11.16&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CEL5A_FIXED_004 &lt;/td&gt;&lt;td&gt;0.7471 &lt;/td&gt;&lt;td&gt;43.72 &lt;/td&gt;&lt;td&gt;+10.40&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The per-residue pLDDT profiles show the biggest improvements in the catalytic domain region (residues 150–250) - exactly where the constrained redesign introduced the most changes around the fixed glutamates.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-note-on-absolute-plddt-values&quot;&gt;A note on absolute pLDDT values&lt;/h3&gt;
&lt;p&gt;The pLDDT values (33–46) look low compared to typical small protein benchmarks. This is expected for a 605 aa two-domain protein in single-sequence mode - AlphaFold2 relies heavily on co-evolutionary information from MSAs to correctly position domains. Single-sequence mode lacks this signal.&lt;/p&gt;
&lt;p&gt;The meaningful comparison is &lt;strong&gt;relative pLDDT under identical conditions&lt;/strong&gt;, not absolute values. Every design predicts better than wildtype under the same constraints.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-d-do-next&quot;&gt;What I'd do next&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;MSA-mode validation&lt;/strong&gt; for top 5 designs - proper pLDDT with full &lt;br&gt;
co-evolutionary information&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rosetta delta-delta-G scoring&lt;/strong&gt; - filter by predicted thermostability change&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Molecular dynamics&lt;/strong&gt; - simulate the top 3 designs at 55°C and 70°C to &lt;br&gt;
assess thermal stability of the catalytic triad geometry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experimental validation&lt;/strong&gt; - express in &lt;em&gt;E. coli&lt;/em&gt;, measure Tm by DSF, &lt;br&gt;
compare CMC activity at elevated temperatures&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&quot;key-lessons&quot;&gt;Key lessons&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Verify catalytic residues experimentally, not from literature.&lt;/strong&gt;&lt;br&gt;
PDB numbering often differs from publication numbering. The 6 Å distance &lt;br&gt;
criterion is more reliable than assuming the literature values transfer directly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Run unconstrained first.&lt;/strong&gt;&lt;br&gt;
The unconstrained run revealed that ProteinMPNN actively avoids glutamate at both catalytic positions. Without this finding, the constrained run would lack motivation and the project would have less scientific narrative.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Fixing 2/605 residues is essentially free.&lt;/strong&gt;&lt;br&gt;
Score distributions between constrained and unconstrained runs are almost &lt;br&gt;
identical. You can enforce catalytic function without sacrificing sequence &lt;br&gt;
diversity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Low absolute pLDDT is not failure.&lt;/strong&gt;&lt;br&gt;
Single-sequence mode for large multi-domain proteins always yields low absolute pLDDT. Design relative comparisons, and always fold the wildtype under the same conditions as your baseline.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://github.com/Farhan89082/proteinmpnn-cel5a&quot;&gt;https://github.com/Farhan89082/proteinmpnn-cel5a&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you have questions about any stage - especially the catalytic residue &lt;br&gt;
identification or the constrained run setup - drop them in the comments.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21915/how-i-redesigned-a-thermostable-enzyme-with-proteinmpnn-validated-with-alphafold2</guid>
<pubDate>Sat, 04 Jul 2026 22:34:22 +0000</pubDate>
</item>
<item>
<title>How I built a computational AMP screening pipeline: from 24,000 sequences to 47 drug candidates</title>
<link>https://coderlegion.com/21916/how-built-computational-amp-screening-pipeline-from-24-000-sequences-to-drug-candidates</link>
<description>&lt;p&gt;Antimicrobial resistance is projected to kill 10 million people annually by 2050 - more than cancer. Antimicrobial peptides (AMPs) are one of the most promising therapeutic classes to fight it. They're cationic, membrane-disrupting, and bacteria struggle to develop resistance against them.&lt;/p&gt;
&lt;p&gt;The problem: there are thousands of candidate sequences in databases. How do you identify the ones worth synthesising?&lt;/p&gt;
&lt;p&gt;In this post I'll walk through a full computational screening pipeline I built from raw database download through machine learning activity prediction to ColabFold structure prediction - ending with 47 high-confidence drug candidates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The full code is on GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Farhan89082/amp-colabfold&quot;&gt;amp-colabfold&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-pipeline-at-a-glance&quot;&gt;The pipeline at a glance&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Farhan89082/amp-colabfold/main/results/figures/pipeline.png&quot; alt=&quot;Pipeline&quot;&gt;&lt;/p&gt;
&lt;p&gt;Five stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Data curation&lt;/strong&gt; - 24,076 sequences from DRAMP 4.0 down to 12,435 after filtering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature engineering&lt;/strong&gt; - 16 physicochemical features, 0% missing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activity modelling&lt;/strong&gt; - gradient boosting classifier, ROC-AUC 0.77&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Candidate selection&lt;/strong&gt; - 131 structured peptides sent to ColabFold&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structure prediction&lt;/strong&gt; - 69 high-confidence structures, 47 very high confidence&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stage-1-data-curation&quot;&gt;Stage 1: Data curation&lt;/h3&gt;
&lt;p&gt;I pulled sequences from DRAMP 4.0 (the Database of Antimicrobial Peptides) &lt;br&gt;
using their REST API - no manual downloads needed.&lt;/p&gt;
&lt;p&gt;Three filters applied in sequence:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Length: 10-50 aa (therapeutic window for AMPs)
df = df[df[&quot;sequence&quot;].str.len().between(10, 50)]

# Canonical amino acids only - no modified residues
CANONICAL = set(&quot;ACDEFGHIKLMNPQRSTVWY&quot;)
df = df[df[&quot;sequence&quot;].apply(lambda s: set(s).issubset(CANONICAL))]

# 90% identity clustering — Python reimplementation of CD-HIT
# (CD-HIT is Linux-only; I wrote a greedy longest-first algorithm in pure Python)
df_curated = cluster_cdhit_python(df, identity=0.90)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The CD-HIT reimplementation was the most interesting part of this stage. &lt;br&gt;
CD-HIT's greedy algorithm is conceptually simple: sort sequences longest-first, then for each sequence check if it's ≥90% identical to any existing cluster representative. If yes, discard it. If no, it becomes a new representative. I added 3-mer pre-filtering to skip obviously dissimilar pairs, matching CD-HIT's default behaviour.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result: 24,076 → 12,435 sequences&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stage-2-feature-engineering&quot;&gt;Stage 2: Feature engineering&lt;/h3&gt;
&lt;p&gt;For each of the 12,435 sequences I computed 16 physicochemical features using &lt;br&gt;
the &lt;code&gt;peptides&lt;/code&gt; Python package:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;features = {
    &quot;net_charge_pH7&quot;:           pep.charge(pH=7.0, pKscale=&quot;Lehninger&quot;),
    &quot;hydrophobicity_eisenberg&quot;:  pep.hydrophobicity(scale=&quot;Eisenberg&quot;),
    &quot;hydrophobic_moment&quot;:        pep.hydrophobic_moment(window=11, angle=100),
    &quot;boman_index&quot;:               pep.boman(),
    &quot;aliphatic_index&quot;:           pep.aliphatic_index(),
    &quot;instability_index&quot;:         pep.instability_index(),
    # + Chou-Fasman helix/sheet/turn propensities computed manually
    # + aromaticity, fraction_positive, fraction_negative, length, pI, MW
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One methodological note: &lt;code&gt;aromaticity()&lt;/code&gt; was removed from newer versions of &lt;br&gt;
&lt;code&gt;peptides&lt;/code&gt;, so I computed it directly from residue frequencies &lt;br&gt;
&lt;code&gt;(F + Y + W) / length&lt;/code&gt; — same definition as Biopython, just implemented inline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result: 16 features, 0% missing across all 12,435 sequences&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stage-3-activity-modelling&quot;&gt;Stage 3: Activity modelling&lt;/h3&gt;
&lt;p&gt;Binary classification: &lt;code&gt;antibacterial&lt;/code&gt; (confirmed MIC data) vs &lt;br&gt;
&lt;code&gt;general/natural&lt;/code&gt; (uncharacterised or broad labels).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;clf = GradientBoostingClassifier(
    n_estimators=300,
    learning_rate=0.05,
    max_depth=3,        # shallow trees → interpretable SHAP values
    subsample=0.8,
    random_state=42,
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;ROC-AUC: 0.77&lt;/strong&gt; on a length-decile-stratified holdout set.&lt;/p&gt;
&lt;p&gt;The class imbalance (28.9% positive) is real and intentional — confirmed &lt;br&gt;
antibacterial sequences with MIC data are rarer than general database entries. &lt;/p&gt;
&lt;p&gt;I didn't oversample, because the model's conservative predictions are &lt;br&gt;
appropriate for a screening tool: better to miss some true positives than &lt;br&gt;
flood the downstream ColabFold stage with false ones.&lt;/p&gt;
&lt;h4 id=&quot;what-drives-the-predictions-&quot;&gt;What drives the predictions?&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Farhan89082/amp-colabfold/main/results/figures/shap_beeswarm.png&quot; alt=&quot;SHAP beeswarm&quot;&gt;&lt;/p&gt;
&lt;p&gt;The SHAP beeswarm tells a clean biological story:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Length&lt;/strong&gt; dominates - longer peptides push positive. This reflects the &lt;br&gt;
antibacterial subset containing more full-length defensins and cathelicidins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fraction_helix&lt;/strong&gt; - high helix propensity → predicted antibacterial. &lt;br&gt;
Consistent with &lt;strong&gt;alpha&lt;/strong&gt;-helical membrane disruption.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fraction_positive&lt;/strong&gt; - cationic residues push positive. Textbook &lt;br&gt;
electrostatic attraction to anionic bacterial membranes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fraction_negative&lt;/strong&gt; - anionic residues suppress prediction. Expected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not a black box. Every prediction is traceable to a physical property with a known biological mechanism. That's the point of using shallow trees with SHAP rather than a deep model.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stage-4-candidate-selection&quot;&gt;Stage 4: Candidate selection&lt;/h3&gt;
&lt;p&gt;From the classifier output I selected peptides with &lt;code&gt;ab_proba ≥ 0.938&lt;/code&gt; and &lt;br&gt;
then applied a low-complexity filter:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def is_low_complexity(seq: str, threshold: float = 0.5) -&amp;gt; bool:
    # Flag homopolymers (KKKKKK, RRRRRR) and tandem repeats
    max_freq = max(seq.count(aa) for aa in set(seq)) / len(seq)
    if max_freq &amp;gt; threshold:
        return True
    for i in range(len(seq) - 2):
        kmer = seq[i:i+3]
        if seq.count(kmer) * 3 / len(seq) &amp;gt; 0.6:
            return True
    return False
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This step is important. Homopolymeric sequences (poly-K, poly-R) score high &lt;br&gt;
on &lt;code&gt;fraction_positive&lt;/code&gt; and fool the classifier - they're real AMPs but &lt;br&gt;
structurally trivial and not useful for ColabFold. The filter removed 44 &lt;br&gt;
low-complexity sequences.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result: 131 structured candidates (15–44 aa) sent to ColabFold&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stage-5-structure-prediction-with-colabfold&quot;&gt;Stage 5: Structure prediction with ColabFold&lt;/h3&gt;
&lt;p&gt;I ran ColabFold 1.6.1 on Google Colab (free T4 GPU) in single-sequence mode appropriate for short peptides where MSA depth is limited anyway.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;colabfold_batch \
  colabfold_input.fasta \
  colabfold_output/ \
  --model-type alphafold2_ptm \
  --num-recycle 3 \
  --num-models 1 \
  --msa-mode single_sequence
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For 131 peptides of 15-44 aa, the full run took ~15 minutes on a T4.&lt;/p&gt;
&lt;h4 id=&quot;parsing-results-locally&quot;&gt;Parsing results locally&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def parse_scores_json(json_path):
    with open(json_path) as f:
        data = json.load(f)
    return {
        &quot;mean_plddt&quot;: float(np.mean(data[&quot;plddt&quot;])),
        &quot;ptm&quot;:        float(data[&quot;ptm&quot;]),
        &quot;plddt_per_residue&quot;: data[&quot;plddt&quot;],
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;plddt-distribution&quot;&gt;pLDDT distribution&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Farhan89082/amp-colabfold/main/results/figures/plddt_distribution.png&quot; alt=&quot;pLDDT distribution&quot;&gt;&lt;/p&gt;
&lt;p&gt;69 of 131 candidates (52.7%) have pLDDT ≥ 70, indicating meaningful structural confidence. For short peptides - which are inherently more disordered than globular proteins - this is a strong result.&lt;/p&gt;
&lt;h4 id=&quot;structural-confidence-vs-activity-prediction&quot;&gt;Structural confidence vs activity prediction&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Farhan89082/amp-colabfold/main/results/figures/plddt_vs_abproba.png&quot; alt=&quot;pLDDT vs ab_proba&quot;&gt;&lt;/p&gt;
&lt;p&gt;The scatter shows no strong correlation between classifier confidence and &lt;br&gt;
structural confidence - which is biologically expected. A peptide can be &lt;br&gt;
highly predicted antibacterial (high &lt;code&gt;ab_proba&lt;/code&gt;) but disordered in solution &lt;br&gt;
(low pLDDT), because many AMPs adopt structure only upon membrane contact.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-results&quot;&gt;Final results&lt;/h3&gt;
&lt;p&gt;Applying both filters - &lt;code&gt;pLDDT ≥ 90&lt;/code&gt; AND &lt;code&gt;ab_proba ≥ 0.95&lt;/code&gt; - gives &lt;br&gt;
&lt;strong&gt;47 very high-confidence candidates&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;AMP ID &lt;/th&gt;&lt;th&gt;Length &lt;/th&gt;&lt;th&gt;pLDDT &lt;/th&gt;&lt;th&gt;pTM &lt;/th&gt;&lt;th&gt;ab_proba&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;AMP_02388 &lt;/td&gt;&lt;td&gt;30 aa &lt;/td&gt;&lt;td&gt;97.3 &lt;/td&gt;&lt;td&gt;0.54 &lt;/td&gt;&lt;td&gt;0.952&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AMP_01454 &lt;/td&gt;&lt;td&gt;36 aa &lt;/td&gt;&lt;td&gt;97.2 &lt;/td&gt;&lt;td&gt;0.60 &lt;/td&gt;&lt;td&gt;0.985&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AMP_02689 &lt;/td&gt;&lt;td&gt;28 aa &lt;/td&gt;&lt;td&gt;97.2 &lt;/td&gt;&lt;td&gt;0.50 &lt;/td&gt;&lt;td&gt;0.954&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AMP_01282 &lt;/td&gt;&lt;td&gt;37 aa &lt;/td&gt;&lt;td&gt;97.1 &lt;/td&gt;&lt;td&gt;0.61 &lt;/td&gt;&lt;td&gt;0.981&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AMP_01129 &lt;/td&gt;&lt;td&gt;38 aa &lt;/td&gt;&lt;td&gt;97.0 &lt;/td&gt;&lt;td&gt;0.62 &lt;/td&gt;&lt;td&gt;0.959&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Full list: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Farhan89082/amp-colabfold/blob/main/results/candidate_amps.csv&quot;&gt;candidate_amps.csv&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-d-do-next-1&quot;&gt;What I'd do next&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hemolysis screening&lt;/strong&gt; - filter candidates through HemoPI2 to remove cytotoxic sequences before any wet-lab work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESM-2 embeddings&lt;/strong&gt; - train a second classifier on sequence embeddings and compare against the physicochemical feature model&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MD simulation&lt;/strong&gt; - for the top 5 candidates, run short molecular dynamics to assess membrane-binding stability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experimental validation&lt;/strong&gt; - MIC assays against &lt;em&gt;E. coli&lt;/em&gt; and &lt;em&gt;S. aureus&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;key-lessons-1&quot;&gt;Key lessons&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Reproducibility over convenience.&lt;/strong&gt; The CD-HIT reimplementation in pure Python adds ~100 lines but means the entire pipeline runs on any OS without binary dependencies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Class imbalance is a feature, not a bug.&lt;/strong&gt; The 3:1 negative:positive &lt;br&gt;
ratio reflects reality. Don't oversample your way out of it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Interpret your model before trusting it.&lt;/strong&gt; The SHAP beeswarm told me &lt;br&gt;
the model was learning real biology (charge, helix propensity) rather than &lt;br&gt;
spurious correlations. Without that check I wouldn't have been confident &lt;br&gt;
sending its predictions to a GPU.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. pLDDT ≠ activity.&lt;/strong&gt; Low structural confidence doesn't mean an AMP is &lt;br&gt;
inactive - it may just be disordered until it hits a membrane. Keep both &lt;br&gt;
metrics and let them inform each other.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://github.com/Farhan89082/amp-colabfold&quot;&gt;github.com/Farhan89082/amp-colabfold&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you found this useful or have questions about any stage, drop a comment below.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21916/how-built-computational-amp-screening-pipeline-from-24-000-sequences-to-drug-candidates</guid>
<pubDate>Sat, 04 Jul 2026 22:33:41 +0000</pubDate>
</item>
<item>
<title>How I Used Python to Analyse 40,000 Human Gut Cells and Uncover What Makes Crohn's Disease Different</title>
<link>https://coderlegion.com/21912/how-used-python-analyse-000-human-gut-cells-and-uncover-what-makes-crohns-disease-different</link>
<description>&lt;p&gt;&lt;em&gt;A step-by-step walkthrough of my multi-sample single-cell RNA sequencing project - written for anyone curious about how computational biology actually works&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;before-we-start---what-is-this-article-actually-about-&quot;&gt;Before we start - what is this article actually about?&lt;/h3&gt;
&lt;p&gt;Imagine being able to take a tiny sample of tissue from a patient's gut, and instead of just knowing &quot;there are cells here&quot;, you could read the activity of every single gene inside every single individual cell - thousands of cells at once.&lt;/p&gt;
&lt;p&gt;That's what single-cell RNA sequencing (scRNA-seq) does. And in this article, I'll walk you through how I used Python to analyse data from 40,000 human gut cells across 18 patients to understand what makes two similar gut diseases - Crohn's disease and ulcerative colitis - biologically different from each other.&lt;/p&gt;
&lt;p&gt;No biology PhD required. I'll explain every term as we go.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-biological-problem---two-diseases-that-look-the-same-but-aren-t&quot;&gt;The biological problem - two diseases that look the same but aren't&lt;/h3&gt;
&lt;p&gt;Crohn's disease (CD) and ulcerative colitis (UC) are both types of Inflammatory Bowel Disease (IBD). Both cause chronic inflammation in the gut, both cause pain and discomfort, and both are lifelong conditions. Doctors have known for decades that they're different diseases, but at a surface level they're easy to confuse.&lt;/p&gt;
&lt;p&gt;The key difference is &lt;strong&gt;where&lt;/strong&gt; and &lt;strong&gt;how&lt;/strong&gt; they inflame:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Crohn's disease&lt;/strong&gt; can affect any part of the digestive tract, tends to cause deep, patchy inflammation, and is driven largely by a type of immune cell called a myeloid cell (think macrophages - the &quot;pac-man&quot; cells of the immune system)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ulcerative colitis&lt;/strong&gt; affects only the colon and rectum, causes continuous surface inflammation, and is driven more by antibody-producing cells called plasma cells&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Understanding these differences at the level of individual cells - not just tissue - is critical for developing better, more targeted treatments. That's where single-cell sequencing comes in.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-data---18-patients-40-000-cells-one-big-challenge&quot;&gt;The data - 18 patients, 40,000 cells, one big challenge&lt;/h3&gt;
&lt;p&gt;I used a publicly available dataset from the CZ CELLxGENE platform containing colonic mucosa (colon lining) biopsies from 18 donors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;6 patients with Crohn's disease&lt;/li&gt;
&lt;li&gt;6 patients with ulcerative colitis&lt;/li&gt;
&lt;li&gt;6 healthy controls&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each donor contributed thousands of cells, giving us 46,700 cells total (40,084 after quality filtering).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But here's the problem:&lt;/strong&gt; when you combine data from 18 different people, collected at different times, processed slightly differently in the lab - the data gets messy. The technical differences between samples (called &lt;strong&gt;batch effects&lt;/strong&gt;) can be so strong that they hide the real biological differences you actually care about.&lt;/p&gt;
&lt;p&gt;Think of it like trying to compare photos taken by 18 different cameras with different colour settings. The same object might look completely different just because of the camera, not because the object actually changed.&lt;/p&gt;
&lt;p&gt;This is where &lt;strong&gt;Harmony&lt;/strong&gt; comes in.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-is-harmony-and-why-does-it-matter-&quot;&gt;What is Harmony and why does it matter?&lt;/h3&gt;
&lt;p&gt;Harmony is a batch correction algorithm. In plain English: it's a mathematical tool that looks at all 18 samples, figures out which differences between samples are due to technical variation (the &quot;camera settings&quot;), and removes those differences — leaving only the real biological signal.&lt;/p&gt;
&lt;p&gt;Here's what the data looks like &lt;strong&gt;before&lt;/strong&gt; Harmony:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;PCA plot coloured by donor - you can see individual donors clustering separately, meaning donor identity is driving the structure more than the actual biology.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And &lt;strong&gt;after&lt;/strong&gt; Harmony:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;UMAP plot coloured by donor - all 18 donors are now mixed uniformly within each cell type cluster. The batch effects are gone.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But crucially - when we colour the same post-Harmony UMAP by &lt;strong&gt;disease group&lt;/strong&gt; instead of donor:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;UMAP coloured by disease - Crohn's, UC, and normal cells now separate into distinct regions. The biology is preserved, the noise is removed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This before/after comparison is the core technical contribution of this project. Without Harmony, any findings could be explained by &quot;oh, that's just because donor 3 was processed differently.&quot; With Harmony, we can be confident the differences are real.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;setting-up-the-pipeline-in-python&quot;&gt;Setting up the pipeline in Python&lt;/h3&gt;
&lt;p&gt;The full analysis uses &lt;strong&gt;Scanpy&lt;/strong&gt; - the standard Python library for single-cell analysis - along with &lt;strong&gt;harmonypy&lt;/strong&gt; for the integration step.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import scanpy as sc
import harmonypy

# Load the dataset
adata = sc.read_h5ad('data/ibd_dataset.h5ad')
# 46,700 cells × 32,354 genes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The data is stored in an &lt;code&gt;AnnData&lt;/code&gt; object - think of it as a very specialised spreadsheet where rows are cells, columns are genes, and there's extra space to store metadata like disease status, donor ID, and cell type labels.&lt;/p&gt;
&lt;h4 id=&quot;step-1---quality-control&quot;&gt;Step 1 - Quality control&lt;/h4&gt;
&lt;p&gt;Not every cell in a sequencing experiment is a real, healthy cell. Some are damaged, some are empty droplets that got accidentally captured, and some are doublets (two cells mistakenly counted as one). We filter these out using three metrics:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Remove low quality cells
adata = adata[adata.obs['n_genes_by_counts'] &amp;gt; 200]   # too few genes = empty droplet
adata = adata[adata.obs['n_genes_by_counts'] &amp;lt; 6000]  # too many genes = doublet
adata = adata[adata.obs['pct_counts_mt'] &amp;lt; 30]        # high mitochondrial % = dying cell
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why mitochondrial genes?&lt;/strong&gt; When a cell is dying or stressed, the nucleus breaks down and releases its RNA - but mitochondria (the cell's energy factories) have their own separate DNA and RNA that stays intact longer. So a high percentage of mitochondrial gene reads is a reliable sign of a low-quality cell.&lt;/p&gt;
&lt;p&gt;After filtering: 40,084 cells remain.&lt;/p&gt;
&lt;h4 id=&quot;step-2---normalisation&quot;&gt;Step 2 - Normalisation&lt;/h4&gt;
&lt;p&gt;Different cells capture different amounts of RNA simply due to technical variation in the sequencing process. A cell with 10,000 RNA molecules captured will look like it expresses every gene more than a cell with only 2,000 captured — even if their true biology is identical.&lt;/p&gt;
&lt;p&gt;We normalise by scaling every cell to have the same total count (10,000), then apply a log transformation to reduce the influence of very highly expressed genes:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-3---finding-highly-variable-genes&quot;&gt;Step 3 - Finding highly variable genes&lt;/h4&gt;
&lt;p&gt;Out of 32,354 genes, most are either not expressed at all or expressed at the same level in every cell (housekeeping genes that keep basic cell functions running). These genes add noise without adding information.&lt;/p&gt;
&lt;p&gt;We select only the &lt;strong&gt;highly variable genes&lt;/strong&gt; - genes whose expression varies meaningfully between cells - for downstream analysis. We found 2,873 of these, using &lt;code&gt;batch_key='donor_id'&lt;/code&gt; to ensure we pick genes that are variable across all donors, not just one:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3,
                             min_disp=0.5, batch_key='donor_id')
# Result: 2,873 highly variable genes
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-4---pca-and-harmony-integration&quot;&gt;Step 4 - PCA and Harmony integration&lt;/h4&gt;
&lt;p&gt;PCA (Principal Component Analysis) reduces our 2,873-gene matrix into 50 dimensions that capture the most important variation. Then Harmony corrects for batch effects within this PCA space:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;sc.tl.pca(adata, svd_solver='arpack')
sc.external.pp.harmony_integrate(adata, key='donor_id', max_iter_harmony=20)
# Harmony converged in just 6 iterations
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The fact that Harmony converged in only 6 out of 20 possible iterations is a good sign - it means the batch effects were relatively structured and correctable, and the biological signal is strong.&lt;/p&gt;
&lt;h4 id=&quot;step-5---umap-visualisation&quot;&gt;Step 5 - UMAP visualisation&lt;/h4&gt;
&lt;p&gt;UMAP (Uniform Manifold Approximation and Projection) takes the Harmony-corrected embeddings and projects them into 2D for visualisation. Similar cells end up close together, different cells end up far apart:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;sc.pp.neighbors(adata, use_rep='X_pca_harmony', n_neighbors=10)
sc.tl.umap(adata)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-we-found---the-biology&quot;&gt;What we found - the biology&lt;/h3&gt;
&lt;h4 id=&quot;finding-1-five-major-cell-populations-in-the-gut&quot;&gt;Finding 1: Five major cell populations in the gut&lt;/h4&gt;
&lt;p&gt;The UMAP revealed five well-separated clusters corresponding to the major cell types in the colon:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plasma cells&lt;/strong&gt; (15,633 cells) - antibody factories&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Colon epithelial cells&lt;/strong&gt; (12,347 cells) - the cells lining the gut wall&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;T cells&lt;/strong&gt; (12,128 cells) - immune soldiers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Myeloid cells&lt;/strong&gt; (3,771 cells) - macrophages and related immune cells&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stromal cells&lt;/strong&gt; (2,821 cells) - structural support cells&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;finding-2-uc-and-cd-have-completely-different-cellular-makeups&quot;&gt;Finding 2: UC and CD have completely different cellular makeups&lt;/h4&gt;
&lt;p&gt;This is where the biology gets interesting. When we look at what proportion of cells belong to each type across disease groups:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plasma cells:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Normal: ~27%&lt;/li&gt;
&lt;li&gt;Crohn's disease: ~30%&lt;/li&gt;
&lt;li&gt;Ulcerative colitis: &lt;strong&gt;~52%&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;UC has nearly double the plasma cell proportion of healthy tissue. Plasma cells make antibodies - this confirms that UC is primarily driven by antibody-mediated (humoral) immunity, a well-established finding that we independently reproduced from raw data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Myeloid cells:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Normal: ~6%&lt;/li&gt;
&lt;li&gt;Ulcerative colitis: ~8%&lt;/li&gt;
&lt;li&gt;Crohn's disease: &lt;strong&gt;~13%&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CD has more than double the myeloid cell proportion. Myeloid cells include macrophages - the cells responsible for the granulomatous (nodule-forming) inflammation that's the hallmark of Crohn's disease.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Epithelial cells:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Normal: ~29%&lt;/li&gt;
&lt;li&gt;Crohn's disease: ~19%&lt;/li&gt;
&lt;li&gt;Ulcerative colitis: &lt;strong&gt;~3%&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is striking. UC patients have almost no epithelial cells left - the gut lining is severely disrupted. This explains why UC causes such pronounced mucosal damage and bleeding.&lt;/p&gt;
&lt;h4 id=&quot;finding-3-the-s100a8-s100a9-signature---a-clinical-biomarker-reproduced-at-single-cell-resolution&quot;&gt;Finding 3: The S100A8/S100A9 signature - a clinical biomarker reproduced at single-cell resolution&lt;/h4&gt;
&lt;p&gt;To find which specific genes are driving the myeloid difference in Crohn's disease, we ran a differential expression analysis comparing CD myeloid cells against normal myeloid cells using the Wilcoxon rank-sum test.&lt;/p&gt;
&lt;p&gt;The top upregulated genes were:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Gene &lt;/th&gt;&lt;th&gt;What it does&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;S100A8&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;Subunit of calprotectin - a protein released by activated immune cells&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;S100A9&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;The other subunit of calprotectin&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;CXCL8&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;Also known as IL-8 - a chemical signal that recruits more immune cells to the inflammation site&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;IL1RN&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;An anti-inflammatory signal - the body trying to dampen its own response&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;BCL2A1&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;Keeps immune cells alive longer in the inflamed environment&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Here's why S100A8 and S100A9 matter: together they form a protein called &lt;strong&gt;calprotectin&lt;/strong&gt;. When gut inflammation is active, immune cells release calprotectin into the stool. Doctors measure this in a routine test called the &lt;strong&gt;faecal calprotectin test&lt;/strong&gt; - one of the most common non-invasive ways to monitor IBD disease activity in clinic.&lt;/p&gt;
&lt;p&gt;By analysing raw single-cell data, we independently identified the exact genes behind this clinical test - at the resolution of individual cells. That's the kind of validation that confirms the analysis is biologically meaningful, not just a statistical artefact.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-learned---technical-takeaways&quot;&gt;What I learned - technical takeaways&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Batch correction is non-negotiable for multi-sample studies.&lt;/strong&gt; Without Harmony, the donor-to-donor variation would swamp the disease signal. Any &quot;finding&quot; could be explained by technical noise. Harmony is now a standard step in any multi-patient single-cell study.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Choosing highly variable genes with &lt;code&gt;batch_key&lt;/code&gt; matters.&lt;/strong&gt; If you find HVGs without accounting for batches, you risk selecting genes that are variable only because of technical differences between samples. Using &lt;code&gt;batch_key='donor_id'&lt;/code&gt; ensures you're finding genes that are genuinely biologically variable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Clinical relevance is the best validation.&lt;/strong&gt; When your computational analysis independently reproduces a well-established clinical biomarker (faecal calprotectin), it gives you confidence that the pipeline is working correctly and the findings are real.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Public datasets are powerful.&lt;/strong&gt; This entire analysis used freely available data from CZ CELLxGENE - no lab access required. The tools (Scanpy, harmonypy) are free and open source. Computational biology has an exceptionally low barrier to entry compared to wet lab science.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-full-code&quot;&gt;The full code&lt;/h3&gt;
&lt;p&gt;The complete annotated notebook is available on GitHub:&lt;br&gt;
👉 &lt;a rel=&quot;nofollow&quot; href=&quot;http://github.com/Farhan89082/ibd-harmony-integration&quot;&gt;https://github.com/Farhan89082/ibd-harmony-integration&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The README includes all figures, biological interpretation, and instructions for reproducing the analysis from scratch.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-s-next-&quot;&gt;What's next?&lt;/h3&gt;
&lt;p&gt;This project is part of a series of three single-cell RNA sequencing analyses I've built for my computational biology portfolio:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Alzheimer's Disease&lt;/strong&gt; - microglial activation and mitochondrial dysfunction in human brain cells → &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Farhan89082/alzheimers-scrna-analysis&quot;&gt;https://github.com/Farhan89082/alzheimers-scrna-analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NSCLC Tumour Microenvironment&lt;/strong&gt; - T cell exhaustion trajectories and macrophage polarisation in lung cancer → &lt;a rel=&quot;nofollow&quot; href=&quot;http://github.com/Farhan89082/nsclc-tumour-microenvironment&quot;&gt;https://github.com/Farhan89082/nsclc-tumour-microenvironment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IBD Harmony Integration&lt;/strong&gt; - this article&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you're a Python developer curious about getting into computational biology, or a biology student learning to code, I hope this walkthrough shows that the barrier is lower than it looks. The tools are excellent, the data is freely available, and the biology is genuinely fascinating.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Have questions about the analysis or want to discuss the methodology? Drop a comment below - I'd love to hear from you.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21912/how-used-python-analyse-000-human-gut-cells-and-uncover-what-makes-crohns-disease-different</guid>
<pubDate>Sat, 04 Jul 2026 20:19:33 +0000</pubDate>
</item>
<item>
<title>T Cells, Tumour Macrophages, and Why Lung Cancer Evades Your Immune System</title>
<link>https://coderlegion.com/21911/t-cells-tumour-macrophages-and-why-lung-cancer-evades-your-immune-system</link>
<description>&lt;p&gt;One of the most frustrating puzzles in cancer biology: some lung cancer patients respond brilliantly to immunotherapy. Others don't respond at all. The tumour microenvironment (TME), the ecosystem of immune, stromal, and cancer cells that surrounds a tumour is a big part of why.&lt;/p&gt;
&lt;p&gt;I wanted to understand what that ecosystem actually looks like at the resolution of individual cells. So I built a single-cell RNA sequencing (scRNA-seq) analysis of non-small cell lung cancer (NSCLC) tissue using Scanpy, working with a publicly available dataset of 111,683 cells from CZ CELLxGENE, spanning 38 distinct cell states.&lt;/p&gt;
&lt;p&gt;Here's what the data revealed about T cell exhaustion, macrophage behaviour, and what makes some tumours more immune-suppressive than others.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;background&quot;&gt;Background&lt;/h3&gt;
&lt;p&gt;NSCLC accounts for approximately 85% of all lung cancer cases. Immune checkpoint inhibitors have transformed treatment for some patients — but a large proportion still don't respond. The leading explanation is that the TME is actively suppressing anti-tumour immunity, rather than the immune system simply being absent.&lt;/p&gt;
&lt;p&gt;To understand this, you need to look not just at whether immune cells are present, but at &lt;strong&gt;what functional state those cells are in&lt;/strong&gt;. That's exactly what single-cell RNA sequencing makes possible.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-dataset&quot;&gt;The Dataset&lt;/h3&gt;
&lt;p&gt;The data comes from a study characterising the cellular and molecular identities of histologic subtypes in lung adenocarcinoma:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;111,683 cells&lt;/strong&gt; after QC (117,266 raw)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;57,398 genes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;38 distinct cell states&lt;/strong&gt; across the TME&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4 histologic subtypes:&lt;/strong&gt; Acinar/Papillary (A/P), A/P + Solid, Micropapillary (MP), and Solid&lt;/li&gt;
&lt;li&gt;Sequenced with 10× Chromium 3' v3&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-pipeline&quot;&gt;The Pipeline&lt;/h3&gt;
&lt;h4 id=&quot;1-quality-control&quot;&gt;1. Quality Control&lt;/h4&gt;
&lt;p&gt;Cells were filtered to retain those with 200–8,000 detected genes, fewer than 100,000 UMI counts, and less than 25% mitochondrial content. This removed around 5,583 low-quality cells.&lt;/p&gt;
&lt;h4 id=&quot;2-normalisation&quot;&gt;2. Normalisation&lt;/h4&gt;
&lt;p&gt;Standard scRNA-seq approach: normalise to 10,000 counts per cell, log1p transform, identify 2,544 highly variable genes.&lt;/p&gt;
&lt;h4 id=&quot;3-dimensionality-reduction&quot;&gt;3. Dimensionality Reduction&lt;/h4&gt;
&lt;p&gt;PCA (50 components) → neighbourhood graph → UMAP. The resulting embedding resolved all 38 cell states, with clear separation between tumour epithelial cells, immune populations, and stromal cells.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-findings&quot;&gt;The Findings&lt;/h3&gt;
&lt;h4 id=&quot;1-t-cell-exhaustion-is-not-an-end-state---it-s-a-trajectory&quot;&gt;1. T Cell Exhaustion Is Not an End State - It's a Trajectory&lt;/h4&gt;
&lt;p&gt;This was the most biologically interesting result. The CD8+ T cell data revealed three functionally distinct states forming a clear exhaustion trajectory:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T.CD8.Naive → T.CD8.Predysfunc (8,897 cells) → T.CD8.Exhausted (1,454 cells)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The pre-dysfunctional population is the &lt;em&gt;largest&lt;/em&gt; CD8 group - meaning the majority of cytotoxic T cells in these tumours are actively being pushed toward dysfunction, not yet exhausted but clearly losing their killing capacity.&lt;/p&gt;
&lt;p&gt;The fully exhausted population co-expresses multiple immune checkpoint molecules simultaneously: &lt;code&gt;CTLA4&lt;/code&gt;, &lt;code&gt;LAG3&lt;/code&gt;, &lt;code&gt;TIGIT&lt;/code&gt;, &lt;code&gt;TOX&lt;/code&gt;, &lt;code&gt;ENTPD1&lt;/code&gt;, and &lt;code&gt;CXCL13&lt;/code&gt;. In contrast, cytotoxic T cells express effector molecules (&lt;code&gt;GZMB&lt;/code&gt;, &lt;code&gt;PRF1&lt;/code&gt;, &lt;code&gt;IFNG&lt;/code&gt;) with minimal checkpoint expression. The dotplot makes this contrast striking and clear.&lt;/p&gt;
&lt;h4 id=&quot;2-regulatory-t-cells-outnumber-cytotoxic-t-cells-4-1&quot;&gt;2. Regulatory T Cells Outnumber Cytotoxic T Cells ~4:1&lt;/h4&gt;
&lt;p&gt;Tregs (6,496 cells) vastly outnumber cytotoxic CD8+ T cells (1,688 cells). Tregs express high levels of &lt;code&gt;CTLA4&lt;/code&gt; and &lt;code&gt;TOX&lt;/code&gt;, consistent with their role in actively suppressing anti-tumour immunity. This ratio alone explains a great deal about why these tumours resist immune attack.&lt;/p&gt;
&lt;h4 id=&quot;3-pro-tumour-macrophages-dominate-the-myeloid-compartment&quot;&gt;3. Pro-Tumour Macrophages Dominate the Myeloid Compartment&lt;/h4&gt;
&lt;p&gt;Five macrophage subpopulations were identified:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mac.SPP1&lt;/strong&gt; and &lt;strong&gt;Mac.SPP1.GPNMB&lt;/strong&gt; (~7,054 cells combined) - pro-tumourigenic, SPP1/osteopontin-expressing macrophages associated with poor prognosis in multiple cancer types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mac.SELENOP&lt;/strong&gt; (3,082 cells) - anti-inflammatory, tissue-resident&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mac.CXCL9&lt;/strong&gt; (1,118 cells) - anti-tumour, recruits cytotoxic T cells&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The pro-tumour to anti-tumour macrophage ratio is approximately &lt;strong&gt;6:1&lt;/strong&gt;. Combined with the T cell exhaustion data, this paints a picture of a TME that is actively - and efficiently - suppressing immune responses at multiple levels simultaneously.&lt;/p&gt;
&lt;h4 id=&quot;4-the-paradox-of-solid-tumours&quot;&gt;4. The Paradox of Solid Tumours&lt;/h4&gt;
&lt;p&gt;Solid histologic subtype tumours had the highest immune infiltration (~75% immune cells vs ~63% in acinar/papillary). But solid subtype is also the most aggressive histology.&lt;/p&gt;
&lt;p&gt;This counterintuitive finding is consistent with what's sometimes called &lt;strong&gt;immune suppression rather than immune exclusion&lt;/strong&gt;: more immune cells arrive, but the suppressive environment is so potent that they can't function. High infiltration doesn't automatically mean effective anti-tumour immunity.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-this-means-for-immunotherapy&quot;&gt;What This Means for Immunotherapy&lt;/h3&gt;
&lt;p&gt;The data points to a few specific vulnerabilities worth thinking about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The large &lt;strong&gt;pre-dysfunctional T cell population&lt;/strong&gt; is a potential therapeutic opportunity - these cells aren't fully exhausted yet and might respond to checkpoint blockade&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;6:1 pro-tumour macrophage ratio&lt;/strong&gt; suggests that myeloid reprogramming strategies (not just T cell-targeting therapies) may be needed&lt;/li&gt;
&lt;li&gt;The Treg suppression appears to work partly through &lt;code&gt;CTLA4&lt;/code&gt;, which is why anti-CTLA4 therapy has shown activity in some NSCLC settings&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-learned&quot;&gt;What I Learned&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subsetting for focused analysis pays off.&lt;/strong&gt; Rather than analysing all 38 cell states at once, isolating the T cell and macrophage compartments separately and running marker analysis on those subsets gave much cleaner, more interpretable results.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Using the authors' cell type annotations directly was the right call.&lt;/strong&gt; For a dataset this complex, re-clustering from scratch would have introduced unnecessary uncertainty. Their labels are validated and biologically grounded.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;With 38 cell states and multiple findings, deciding what to prioritise in the write-up took as long as some analysis steps.&lt;/strong&gt; Storytelling is part of the work.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-code&quot;&gt;The Code&lt;/h3&gt;
&lt;p&gt;Everything is in a fully annotated Jupyter Notebook. Download the H5AD file from CZ CELLxGENE and place it in the &lt;code&gt;data/&lt;/code&gt; folder to run it. &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Farhan89082/nsclc-tumour-microenvironment&quot;&gt;https://github.com/Farhan89082/nsclc-tumour-microenvironment&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The TME is one of the most complex biological systems we can now study at single-cell resolution - and it's increasingly clear that understanding it is key to making immunotherapy work for more patients. Happy to discuss the analysis, the biology, or the pipeline in the comments.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21911/t-cells-tumour-macrophages-and-why-lung-cancer-evades-your-immune-system</guid>
<pubDate>Sat, 04 Jul 2026 19:50:20 +0000</pubDate>
</item>
<item>
<title>How I Mapped Brain Cell Changes in Alzheimer's Disease Using Single-Cell RNA Sequencing</title>
<link>https://coderlegion.com/21910/how-i-mapped-brain-cell-changes-in-alzheimers-disease-using-single-cell-rna-sequencing</link>
<description>&lt;p&gt;Alzheimer's disease affects over 55 million people worldwide, yet the precise molecular changes happening inside individual brain cells remain poorly understood. I wanted to dig into that question - not at the tissue level, but at single-cell resolution.&lt;/p&gt;
&lt;p&gt;So I built a full scRNA-seq analysis pipeline in Python using Scanpy, working with a publicly available dataset of 63,608 nuclei from human prefrontal cortex tissue (sourced from CZ CELLxGENE). The donors spanned three Braak stages: 0 (cognitively normal), 2 (early Alzheimer's), and 6 (severe Alzheimer's).&lt;/p&gt;
&lt;p&gt;Here's what I found and how I found it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-dataset-1&quot;&gt;The Dataset&lt;/h3&gt;
&lt;p&gt;The data came from a study on the molecular characterisation of selectively vulnerable neurons in AD. It covers the superior frontal gyrus, a prefrontal region known to be hit hard by neurodegeneration - and includes seven major brain cell types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Glutamatergic neurons&lt;/li&gt;
&lt;li&gt;GABAergic neurons&lt;/li&gt;
&lt;li&gt;Oligodendrocytes&lt;/li&gt;
&lt;li&gt;OPCs (oligodendrocyte precursor cells)&lt;/li&gt;
&lt;li&gt;Astrocytes&lt;/li&gt;
&lt;li&gt;Microglia&lt;/li&gt;
&lt;li&gt;Endothelial cells&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;31,997 genes. 63,608 cells. Three disease stages. A lot to work with.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-pipeline-1&quot;&gt;The Pipeline&lt;/h3&gt;
&lt;h4 id=&quot;1-quality-control-1&quot;&gt;1. Quality Control&lt;/h4&gt;
&lt;p&gt;No dataset is clean out of the box. I filtered cells to keep only those with between 200 and 6,000 detected genes, and excluded anything with more than 20% mitochondrial gene content (high mitochondrial reads usually signal a dying or damaged cell). This removed around 2,809 low-quality cells.&lt;/p&gt;
&lt;h4 id=&quot;2-normalisation-1&quot;&gt;2. Normalisation&lt;/h4&gt;
&lt;p&gt;Library sizes were normalised to 10,000 counts per cell, followed by log1p transformation, standard practice that makes cells comparable regardless of how deeply they were sequenced. I then identified 5,607 highly variable genes to focus the downstream analysis.&lt;/p&gt;
&lt;h4 id=&quot;3-dimensionality-reduction-1&quot;&gt;3. Dimensionality Reduction&lt;/h4&gt;
&lt;p&gt;PCA (50 components) → neighbourhood graph (10 neighbours, 20 PCs) → UMAP embedding.&lt;/p&gt;
&lt;p&gt;The UMAP is where the biology starts to become visible. All seven cell types separated into distinct clusters, with clear separation between neuronal subtypes and glial populations.&lt;/p&gt;
&lt;h4 id=&quot;4-differential-expression&quot;&gt;4. Differential Expression&lt;/h4&gt;
&lt;p&gt;For the microglial analysis, I used a Wilcoxon rank-sum test comparing AD vs normal microglia, with Benjamini-Hochberg multiple testing correction to control the false discovery rate.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-findings-1&quot;&gt;The Findings&lt;/h3&gt;
&lt;h4 id=&quot;glutamatergic-neurons-are-selectively-depleted&quot;&gt;Glutamatergic Neurons Are Selectively Depleted&lt;/h4&gt;
&lt;p&gt;One of the most striking results: glutamatergic (excitatory) neurons dropped from ~34% of cells in normal tissue to ~30% in AD tissue. This might sound like a small shift, but at the scale of 60,000+ cells it's biologically meaningful and it's consistent with what the literature already tells us about the selective vulnerability of excitatory neurons in AD.&lt;/p&gt;
&lt;h4 id=&quot;alzheimer-s-leaves-a-clear-signature-in-microglia&quot;&gt;Alzheimer's Leaves a Clear Signature in Microglia&lt;/h4&gt;
&lt;p&gt;Microglia are the brain's resident immune cells, and they showed the most dramatic transcriptomic shifts between AD and normal tissue. The differential expression analysis revealed:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Upregulated in AD microglia:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MALAT1&lt;/code&gt; - a long non-coding RNA strongly linked to neuroinflammation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FTH1&lt;/code&gt; - ferritin heavy chain, pointing to iron dysregulation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;B2M&lt;/code&gt; - beta-2 microglobulin, a known AD biomarker reflecting immune activation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FOXP1&lt;/code&gt; - a transcription factor tied to microglial activation states&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Downregulated in AD microglia:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MT-CO3&lt;/code&gt;, &lt;code&gt;MT-CO1&lt;/code&gt;, &lt;code&gt;MT-ATP6&lt;/code&gt;, &lt;code&gt;MT-ND2&lt;/code&gt; - mitochondrial complex genes, suggesting impaired energy metabolism in AD-affected microglia&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This pattern is consistent with what's described as disease-associated microglia (DAM) in the literature, a distinct activation state that emerges in neurodegeneration.&lt;/p&gt;
&lt;h4 id=&quot;disease-progression-captured-across-braak-stages&quot;&gt;Disease Progression Captured Across Braak Stages&lt;/h4&gt;
&lt;p&gt;Cells from all three Braak stages were distributed across every cluster in the UMAP. This reflects that AD-associated transcriptomic changes are not confined to one cell type, they propagate across the whole cellular ecosystem as the disease progresses.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-learned-1&quot;&gt;What I Learned&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Memory management matters.&lt;/strong&gt; 60K+ cells × 30K+ genes is a big matrix. Working with sparse AnnData objects and being deliberate about which steps you checkpoint to disk makes a real difference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cell type annotation is an art.&lt;/strong&gt; The dataset came with pre-annotated cell types, but validating them against canonical marker genes (the dotplot step) is essential and satisfying when the biology confirms itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volcano plots are still one of the most readable ways to communicate differential expression.&lt;/strong&gt; They give you significance and fold change in one glance.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-code-1&quot;&gt;The Code&lt;/h3&gt;
&lt;p&gt;Everything is in a fully annotated Jupyter Notebook. If you want to reproduce the analysis, download the H5AD file from CZ CELLxGENE and drop it in the &lt;code&gt;data/&lt;/code&gt; folder. &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Farhan89082/alzheimers-scrna-analysis&quot;&gt;https://github.com/Farhan89082/alzheimers-scrna-analysis&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If you're working with single-cell data or have questions about the pipeline, I'd love to hear from you in the comments. There's something fascinating about watching biology emerge from a matrix of gene counts.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21910/how-i-mapped-brain-cell-changes-in-alzheimers-disease-using-single-cell-rna-sequencing</guid>
<pubDate>Sat, 04 Jul 2026 19:49:43 +0000</pubDate>
</item>
<item>
<title>No Single Key Opens the Boundary: An Offline Dual-Control Gate for Sensitive Artifact Export</title>
<link>https://coderlegion.com/21756/no-single-key-opens-the-boundary-offline-dual-control-gate-for-sensitive-artifact-export</link>
<description>&lt;p&gt;In short: PYRHELIX is &lt;strong&gt;an offline dual-control release gate for sensitive BIO/PII artifacts&lt;/strong&gt;. It does not replace perimeter security, compliance review, or clinical judgment. It closes one specific gap: no single actor, key, or approval should be able to move a high-consequence artifact across the release boundary alone.&lt;/p&gt;
&lt;p&gt;By BIO/PII export, we mean high-consequence data bundles such as genomic files, clinical exports, research packets, identity-linked health records, and derived AI-ready datasets leaving a controlled environment.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-gap-between-what-bio-pii-data-is-worth-and-how-it-s-protected&quot;&gt;The gap between what BIO/PII data is worth and how it's protected&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/3rs3qkefljymispobwri.png&quot; alt=&quot;2&quot;&gt;&lt;/p&gt;
&lt;p&gt;The BIO and health-data economy is enormous, and it's getting more automated every year as AI pipelines touch more of it. The security incidents in this space are not rare, and they are not small.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;23andMe (2023):&lt;/strong&gt; attackers used credential stuffing, feeding passwords stolen from unrelated breaches into 23andMe's login page until roughly 14,000 accounts matched. Because of the platform's DNA-relative matching feature, that cascaded into exposure of genetic and ancestry data tied to an estimated &lt;strong&gt;6.9 million users&lt;/strong&gt;, including a disproportionate concentration of Ashkenazi Jewish and ethnically Chinese users who were then targeted with hateful, ancestry-specific harassment. (&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.hipaajournal.com/6-9-million-23andme-users-affected-by-data-breach/&quot;&gt;HIPAA Journal&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://en.wikipedia.org/wiki/23andMe_data_leak&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Healthcare / UnitedHealth (2024):&lt;/strong&gt; a single server without multi-factor authentication was the entry point for a ransomware group. Change Healthcare clears roughly 1 in 3 U.S. patient records. The final confirmed count was &lt;strong&gt;192.7 million people affected&lt;/strong&gt;, the largest healthcare breach ever reported to HHS, disrupting billing and payment processing across thousands of hospitals and clinics nationwide. Response cost: &lt;strong&gt;$3.1 billion&lt;/strong&gt; in 2024 alone. (&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.bleepingcomputer.com/news/security/unitedhealth-now-says-190-million-impacted-by-2024-data-breach/&quot;&gt;BleepingComputer&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.cybersecuritydive.com/news/change-healthcare-attack-affects-190-million/738369/&quot;&gt;Cybersecurity Dive&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vastaamo (Finland, 2020):&lt;/strong&gt; a psychotherapy clinic stored &lt;strong&gt;~36,000 patients'&lt;/strong&gt; therapy notes unencrypted, on a system whose root account had no password. When extortion of the company failed, the attacker emailed roughly &lt;strong&gt;30,000 patients directly&lt;/strong&gt;, demanding ransom to avoid publishing their session notes. The clinic went bankrupt within months. (&lt;a rel=&quot;nofollow&quot; href=&quot;https://en.wikipedia.org/wiki/Vastaamo_data_breach&quot;&gt;Wikipedia&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.cnn.com/2020/10/27/tech/finland-therapy-patients-blackmailed-data-breach-intl&quot;&gt;CNN&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;None of these three were release-boundary failures.&lt;/strong&gt; They were perimeter and infrastructure failures: credential stuffing, a missing MFA setting, unencrypted storage with no root password. A signing protocol does not fix a server with no root password, and we are not going to claim otherwise.&lt;/p&gt;
&lt;p&gt;What they show, together, is a pattern. BIO and health data carries some of the highest-consequence blast radius of any data category, and the organizations holding it are frequently operating below the security maturity that scale would justify. Compliance frameworks like HIPAA and GDPR mandate access logging and encryption at rest. &lt;/p&gt;
&lt;p&gt;They say much less about what happens at the moment a sensitive artifact is about to leave a controlled environment. In practice, that moment is still often gated by one signature, one approval click, one export button.&lt;/p&gt;
&lt;p&gt;That narrower gap, not &quot;BIO security&quot; broadly but specifically the release and export decision, is what we're building PYRHELIX to close. It is not a fix for this industry. It is one piece of it, and we want to find out if it actually holds up.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-the-release-step-specifically-stays-weak&quot;&gt;Why the release step specifically stays weak&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/4h4vdcvjhrfq7mzb0h1h.png&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;
&lt;p&gt;A few structural reasons this keeps happening, independent of any one company's competence:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compliance is not the same discipline as security engineering.&lt;/strong&gt; Passing a HIPAA audit checks access logs and encryption settings. It rarely asks whether one compromised or coerced person can push sensitive data out the door alone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security engineering talent concentrates in tech and finance, not biotech.&lt;/strong&gt; Research organizations hire for domain science, not for building dual-control release infrastructure in-house.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consolidation creates concentration risk.&lt;/strong&gt; Change Healthcare touching a third of U.S. patient records through one platform is the extreme case. The same pattern, one vendor, one pipeline, one signer, repeats at smaller scale everywhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release is usually the last, least-engineered step&lt;/strong&gt; in an otherwise carefully built research or clinical pipeline. By the time data is ready to ship, the hard technical work already happened, and the actual export is often just an email or a shared drive.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-pyrhelix-is&quot;&gt;What PYRHELIX is&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/0k0rxw5z2wo1yojfsxo0.png&quot; alt=&quot;4&quot;&gt;&lt;/p&gt;
&lt;p&gt;PYRHELIX enforces that a sensitive bundle cannot be released by one actor acting alone. The workflow has two independent steps.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Producer (Strand A):&lt;/strong&gt; the party that generated the artifact seals its content hash and attests to what was produced. This alone is &lt;em&gt;not&lt;/em&gt; enough to release anything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authority (Strand B):&lt;/strong&gt; an independent reviewer, using a different signing key and a different role, attests approval. That attestation is cryptographically bound to the exact same bundle closure Strand A produced.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The release boundary only opens when both strands are present, use distinct keys, and bind to the same closure. Every step is recorded in a &lt;strong&gt;signed, hash-chained governance journal&lt;/strong&gt;, so a separate offline verifier, potentially running on a machine that never touched the original data, can independently replay the whole decision trail: what was produced, who approved it, with which keys, in what order.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;why-strand-a-strand-b-and-where-the-metaphor-stops&quot;&gt;Why &quot;Strand A / Strand B&quot;, and where the metaphor stops&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/c58gjpd1ej1a857zbxyv.png&quot; alt=&quot;5&quot;&gt;&lt;/p&gt;
&lt;p&gt;Worth getting right rather than sounding clever: a real DNA double helix does not have strands named &quot;A&quot; and &quot;B.&quot; The correct terms are &lt;strong&gt;sense strand&lt;/strong&gt; (coding strand) and &lt;strong&gt;antisense strand&lt;/strong&gt; (template strand), and neither one alone is the functional, stable molecule; the helix only exists once both are bound together.&lt;/p&gt;
&lt;p&gt;&quot;Strand A&quot; (producer) and &quot;Strand B&quot; (authority) are protocol role labels that borrow that single idea, not a claim to real molecular-biology nomenclature. &lt;/p&gt;
&lt;p&gt;PYRHELIX's separate, internal bit-level integrity subsystem does use the correct sense/antisense terms for an unrelated purpose (parity diagnostics on hashed symbol streams). The governance mechanism described here is plain Ed25519 dual-signature binding over a shared closure hash.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;two-pieces-of-the-actual-code&quot;&gt;Two pieces of the actual code&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/bpsdnhkx0k8jk1yxr59x.png&quot; alt=&quot;6&quot;&gt;&lt;/p&gt;
&lt;p&gt;Real source, not simplified for effect.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Role separation can't be satisfied by accident.&lt;/strong&gt; In strict mode, the verifier checks that Strand A and Strand B didn't reuse the same signing key, the same role, or the same underlying public key. Any one of those three silently fails the whole bundle:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# pyrhelix/governance/verifier_enforcement.py
if strand_a_key_id and strand_a_key_id == strand_b_key_id:
    errors.append(error(&quot;KEY_ID_REUSE&quot;, &quot;authenticity&quot;,
        &quot;Strand A and Strand B reused the same key_id in strict mode.&quot;))
    attestation.strand_b_authenticity_verified = False
    attestation.cross_strand_binding_verified = False

if strand_a_role and strand_a_role == strand_b_role:
    errors.append(error(&quot;ROLE_REUSE&quot;, &quot;authenticity&quot;,
        &quot;Strand A and Strand B reused the same role in strict mode.&quot;))
    attestation.strand_b_authenticity_verified = False
    attestation.cross_strand_binding_verified = False
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There's no &quot;trust me, these are different people&quot; flag anywhere in this path. If the same key produced both attestations, the bundle fails.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every journal entry is chained into the one before it, not just hashed on its own.&lt;/strong&gt; The entry hash is computed over &lt;code&gt;prev_entry_hash + canonical_bytes&lt;/code&gt;, so tampering with entry N breaks the hash of every entry after it, not just the one you touched:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# pyrhelix/governance/chronicle_io.py
canonical_bytes = canonical_chronicle_bytes(payload)
payload[&quot;entry_hash&quot;] = sha256_hex_bytes(
    (prev_entry_hash + canonical_bytes.decode(&quot;utf-8&quot;)).encode(&quot;utf-8&quot;)
)
payload[&quot;event_signature_b64&quot;] = base64.b64encode(
    signing_key.sign(canonical_bytes).signature
).decode(&quot;ascii&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Splice out or edit one line of the journal and every subsequent entry fails replay. That is exactly what the adversarial CI gate checks for (&lt;code&gt;journal_tail_truncation&lt;/code&gt;, &lt;code&gt;manifest_closure_tamper&lt;/code&gt;, and several others) on every commit.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;built-on-standards-not-custom-cryptography&quot;&gt;Built on standards, not custom cryptography&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/dzi281ddvv74k84tzko5.png&quot; alt=&quot;7&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Layer &lt;/th&gt;&lt;th&gt;Standard&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Content hashing &lt;/td&gt;&lt;td&gt;SHA-256 (&lt;a rel=&quot;nofollow&quot; href=&quot;https://csrc.nist.gov/pubs/fips/180-4/upd1/final&quot;&gt;FIPS 180-4&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Canonical JSON for hashing/signing &lt;/td&gt;&lt;td&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://datatracker.ietf.org/doc/html/rfc8785&quot;&gt;RFC 8785 (JCS)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Signatures &lt;/td&gt;&lt;td&gt;Ed25519 (&lt;a rel=&quot;nofollow&quot; href=&quot;https://datatracker.ietf.org/doc/html/rfc8032&quot;&gt;RFC 8032&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://csrc.nist.gov/news/2023/nist-releases-fips-186-5-and-sp-800-186&quot;&gt;FIPS 186-5&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For supply-chain security readers: PYRHELIX is not yet an in-toto or SLSA-compatible attestation format. That compatibility layer is the next evaluated integration path, not a claim we are making today.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-it-actually-rejects&quot;&gt;What it actually rejects&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/h4e43a1llj6w7ssqe575.png&quot; alt=&quot;8&quot;&gt;&lt;/p&gt;
&lt;p&gt;An adversarial CI gate exercises these cases on every change, not just the happy path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two strands signed with the same key or role&lt;/li&gt;
&lt;li&gt;A revoked or retired signing key reused for a new decision&lt;/li&gt;
&lt;li&gt;Journal tampering, sequence gaps, or tail truncation&lt;/li&gt;
&lt;li&gt;Replay of a superseded governance session&lt;/li&gt;
&lt;li&gt;Authority key rotation without a signed rotation event&lt;/li&gt;
&lt;li&gt;A bundle declaring &quot;no raw payload&quot; while raw sensitive content is actually present in the bundle directory&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;running-it-offline&quot;&gt;Running it offline&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python tools/governance_ci_gate.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It bootstraps local producer/authority keys, emits a provisional bundle (Strand A), finalizes it (Strand B), verifies the finalized bundle, and independently verifies the signed journal, all without a network call. It exits non-zero on any failure, which is also how it runs in CI on every commit.&lt;/p&gt;
&lt;p&gt;The repository is currently private while we validate this against a real BIO/PII workflow before opening it more broadly.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-this-is-not&quot;&gt;What this is not&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Not a runtime AI firewall. Tools like LlamaFirewall or NeMo Guardrails intercept model calls in real time and inspect prompts or outputs as they happen. PYRHELIX operates downstream of that. It gates the moment content leaves the organization, after inference is already done.&lt;/li&gt;
&lt;li&gt;Not a fix for the kind of breaches described above. Those were perimeter and credential failures, not release-gate failures.&lt;/li&gt;
&lt;li&gt;Not a compliance scoring product. Tools that score content against frameworks like GDPR or HIPAA evaluate what's inside a bundle. PYRHELIX only verifies cryptographically that two independent signatures exist. It doesn't replace that evaluation. It gates release after it.&lt;/li&gt;
&lt;li&gt;Not yet interoperable with in-toto/SLSA attestation formats. We're sequencing that compatibility layer after real-world validation, not blocked on it technically.&lt;/li&gt;
&lt;li&gt;Not externally audited yet. Internal verification today means an automated test suite plus the adversarial CI gate above.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;where-we-need-input&quot;&gt;Where we need input&lt;/h3&gt;
&lt;p&gt;If BIO/PII export is part of your work, three questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is release approval today genuinely single-approver, or do you already run a dual-control process?&lt;/li&gt;
&lt;li&gt;Does verification need to work fully offline, or is a networked service acceptable?&lt;/li&gt;
&lt;li&gt;What would have to be true for you to say &quot;this doesn't solve my problem&quot;?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If any of these land for you, we'd like to run a real scenario together: &lt;em&gt;Emails are not allowed&lt;/em&gt;e&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21756/no-single-key-opens-the-boundary-offline-dual-control-gate-for-sensitive-artifact-export</guid>
<pubDate>Thu, 02 Jul 2026 11:12:52 +0000</pubDate>
</item>
<item>
<title>We Read a French Health-Tech Giant's Open-Source AI Pipeline Next to Its Paper. And...</title>
<link>https://coderlegion.com/21414/we-read-a-french-health-tech-giants-open-source-ai-pipeline-next-to-its-paper-and</link>
<description>&lt;h3 id=&quot;when-a-health-ai-release-becomes-a-governance-surface&quot;&gt;&lt;strong&gt;When a Health-AI Release Becomes a Governance Surface&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=6341999130821584442&quot; alt=&quot;2&quot;&gt;&lt;/p&gt;
&lt;p&gt;Biotech and health-AI didn't slow down in 2026.&lt;/p&gt;
&lt;p&gt;By June, the Flamehaven team's tracking of disclosed biotechnology equity rounds showed 113 venture and strategic financings. Roughly $17.0 billion deployed, year to date.[1] Therapeutics platforms still take most of the deal count. But AI-native infrastructure (model platforms, data pipelines, diagnostic engines) is eating a bigger slice of every quarter than the one before it.&lt;/p&gt;
&lt;p&gt;Narrow that down to France and the picture sharpens.&lt;/p&gt;
&lt;p&gt;AI made up 62% of the €8.2 billion raised by French tech ventures in 2025. The country now counts more than 750 AI-focused companies.[2] Healthcare is one of the best-funded verticals inside that boom. Paris Region healthcare startups alone pulled in more than €3 billion over the past three years, the largest healthcare VC total of any region in the EU.[3]&lt;/p&gt;
&lt;p&gt;None of that money showed up by accident. France 2030 put €54 billion behind it on purpose. A public Health Data Hub, built on real hospital EHR data. Compute poured into the Jean Zay supercomputer cluster. All of it built so French health-AI companies could train and publish without leaning on American infrastructure.[4]&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=13707866308910919047&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;
&lt;p&gt;Doctolib runs the appointment-booking and teleconsultation platform that roughly 80 million patients across France, Germany, Italy, and the Netherlands use to see a doctor. €348 million in annual revenue. 2,900 employees.[5] This is the kind of company whose AI releases get read by hospital procurement officers before anyone in machine learning even opens the GitHub link.&lt;/p&gt;
&lt;p&gt;On June 20, 2026, Doctolib's research lab published exactly that kind of release. A paper.[7] Two open models on HuggingFace. A public GitHub repository.[6] All dropped the same day: the paper and models under open licenses, and the code as a public repository describing a pipeline for building French medical language models from web data, paired with a public dataset called FineMed.&lt;/p&gt;
&lt;p&gt;The Flamehaven team audits AI repositories in bio and health-adjacent domains for a living. Mostly that means reading a README against a test suite, writing down where they disagree, and moving to the next one. This time the team did not move on. One sentence in the paper kept refusing to match what the repository actually does. Pulling on that thread led through the code, into the company's own commercial position, and out the other side into three explanations that remain plausible from the public evidence, though not equally supported.&lt;/p&gt;
&lt;p&gt;Here's what the team found, in the order they found it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-s-actually-sitting-in-the-repository&quot;&gt;What's Actually Sitting in the Repository&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3388500297101204283&quot; alt=&quot;5&quot;&gt;&lt;/p&gt;
&lt;p&gt;Before suspecting anything, you have to know what you're looking at. So start with the boring pass first.&lt;/p&gt;
&lt;p&gt;The repository is genuinely well-organized. The README lays out three clean stages, acquisition, classification, and synthesis, each backed by a matching &lt;code&gt;.slurm&lt;/code&gt; job-runner script. Pydantic schemas enforce structure on every LLM output. The tokenizer chain runs end to end: SentencePiece training, vocabulary trimming, fertility checks that actually pass. Across thirty-one Python files, zero AST parse errors. Zero bare &lt;code&gt;except:&lt;/code&gt; blocks quietly swallowing exceptions. This is not amateur code, and it would be dishonest to pretend otherwise.&lt;/p&gt;
&lt;p&gt;But sitting underneath that competence are a few things that look like exactly what they are, the kind of thing every engineer ships at 2 a.m. and means to fix later:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No LICENSE file&lt;/strong&gt; in the code repository, even though both released models carry Apache-2.0 on HuggingFace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A real reproducibility bug.&lt;/strong&gt; The parameter &lt;code&gt;p2_short_floor&lt;/code&gt; defaults to &lt;code&gt;128&lt;/code&gt; through the main pipeline entrypoint. Call the underlying worker function directly, which is exactly what happens when a researcher debugs one file in isolation, and it silently defaults to &lt;code&gt;256&lt;/code&gt; instead. No error. No warning. Just a different training corpus depending on which door you walked through, 234 lines apart from its own contradiction. That matters beyond aesthetics: if the corpus produced by one path differs from the corpus produced by the other, and the paper does not specify which invocation path was used, then the benchmark results in Tables 5 and 6 cannot be independently verified by a third party working from the public repository alone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An undocumented dependency wall.&lt;/strong&gt; Try to actually run this and &lt;code&gt;convert_to_mds.py --help&lt;/code&gt; dies on &lt;code&gt;ModuleNotFoundError: No module named 'snappy'&lt;/code&gt;, a C-extension dependency three layers deep that the README never mentions. &lt;code&gt;llm_generate.py --help&lt;/code&gt; fails the same way on &lt;code&gt;vllm&lt;/code&gt;, because the synthesis pipeline that built the training corpus has no CPU fallback and needs a GPU the docs do not flag as mandatory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple hardcoded absolute file paths, including active ones&lt;/strong&gt;, scattered across six files and pointing straight at Doctolib's internal Jean Zay supercomputer cluster. Not commented out. Live.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The team ran the dependency commands directly on a real Python environment. Both failed on first invocation — &lt;code&gt;snappy&lt;/code&gt; missing before &lt;code&gt;mosaicml-streaming&lt;/code&gt; could initialize, &lt;code&gt;vllm&lt;/code&gt; missing immediately on import. Neither dependency appears as a prerequisite in the README. That is not a gap caught in review; it is a documented failure from execution.&lt;/p&gt;
&lt;p&gt;None of that, on its own, should raise anyone's pulse. Research code ships unpolished constantly. The Flamehaven team has audited far messier repositories sitting under far smaller claims than this one.&lt;/p&gt;
&lt;p&gt;What actually stopped the team wasn't any single item on that list. It was what happened once they stopped reading the code on its own terms and started holding it up against the one sentence the paper uses to describe what this thing is supposed to be.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-sentence-and-what-s-sitting-underneath-it&quot;&gt;The Sentence, and What's Sitting Underneath It&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3336292737438130120&quot; alt=&quot;6&quot;&gt;&lt;/p&gt;
&lt;p&gt;The paper's contributions list states it as a formal, numbered claim. The phrasing is specific enough to check:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&quot;We release FineMed... together with FineMed-rephrased, and a &lt;strong&gt;reproducible curation pipeline&lt;/strong&gt; with multi-axis annotators.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The repository's own README lands on almost the identical phrase, independently, in its opening paragraph, written for a completely different audience:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&quot;This repository holds the &lt;strong&gt;reproducible data-curation pipeline&lt;/strong&gt;...&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Two documents. Two different readers in mind, one for peer reviewers who will never open a terminal, one for GitHub visitors who will. Both land, unprompted, on the same word. That convergence is what made it worth checking, line by line, whether the code underneath actually earns that word or just borrows it.&lt;/p&gt;
&lt;p&gt;Here's what sits directly under the functions the paper names as completed work:&lt;/p&gt;
&lt;p&gt;!8.png&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;What the Paper Calls It &lt;/th&gt;&lt;th&gt;Where It Lives in Code &lt;/th&gt;&lt;th&gt;What's Actually There&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;§5.1, the &quot;coarse pre-screen&quot; stage &lt;/td&gt;&lt;td&gt;&lt;code&gt;llm_rewrite.py&lt;/code&gt;, line 840 &lt;/td&gt;&lt;td&gt;&lt;code&gt;# tmp pre-filter&lt;/code&gt;, above the active filtering call&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;§3.3, &quot;style dimensions&quot; &lt;/td&gt;&lt;td&gt;&lt;code&gt;llm_rewrite.py&lt;/code&gt;, line 629 &lt;/td&gt;&lt;td&gt;&lt;code&gt;# tmp: v3 (default)&lt;/code&gt;, on the live default branch&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;§3.1, pipeline orchestration &lt;/td&gt;&lt;td&gt;&lt;code&gt;llm_generate.py&lt;/code&gt;, line 13 &lt;/td&gt;&lt;td&gt;&lt;code&gt;# tmp control&lt;/code&gt;, above a module-level env-var read&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Three places. Three markers, each one reading, in plain English: &lt;em&gt;not finished yet.&lt;/em&gt; And all three sit precisely on the parts of the pipeline that decide whether someone outside Doctolib could rebuild this from raw web data to a trained model. Not on the model architecture. Not on the entity extraction logic. Specifically on the parts that determine whether the process is repeatable by anyone who isn't already inside the building.&lt;/p&gt;
&lt;p&gt;There was a fourth candidate the team almost included. The reason it didn't make the cut matters more than the marker itself.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;## tmp&lt;/code&gt; comment in &lt;code&gt;split_document.py&lt;/code&gt; looked, at first glance, like it tagged an active filter from the paper's §4.1. So the team didn't take it at face value. They opened the file and checked what the comment was actually sitting on top of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The comment itself&lt;/strong&gt;: &lt;code&gt;## tmp: keep only med01 ∧ edu4&lt;/code&gt;, which reads exactly like an active filter tag.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The lines directly underneath it&lt;/strong&gt;: a &lt;code&gt;dataset.filter(...)&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The status of that call&lt;/strong&gt;: every line of it commented out. Not running. Not reachable. Dead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the marker was not tagging live code. It was a historical note sitting on top of a block someone had already disabled, the kind of comment that survives a refactor by accident, not a flag on something the pipeline still does. Getting that distinction wrong would have meant reporting four signals instead of three. The difference between those two numbers is the entire reason this kind of checking exists in the first place.&lt;/p&gt;
&lt;p&gt;Three real markers stayed on the table. Which raised an obvious next question: was this confined to one section that happened to catch the eye, or did it run through the whole paper?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;checking-all-twelve-claims-not-just-the-one-that-looked-bad&quot;&gt;Checking All Twelve Claims, Not Just the One That Looked Bad&lt;/h3&gt;
&lt;p&gt;So the team went back and mapped every formal contribution the paper makes against the code that's supposed to implement it. All twelve. Each one scored as fully matching, partially matching, or simply impossible to check from outside the company.&lt;/p&gt;
&lt;p&gt;Eight came back fully verified:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The two-stage annotation architecture&lt;/li&gt;
&lt;li&gt;The medical-term density thresholds&lt;/li&gt;
&lt;li&gt;The educational quality thresholds&lt;/li&gt;
&lt;li&gt;The 8-class medical entity extractor, where active code matches the paper's entity table exactly&lt;/li&gt;
&lt;li&gt;The multi-dimensional rewriting styles&lt;/li&gt;
&lt;li&gt;The tokenizer vocabulary alignment&lt;/li&gt;
&lt;li&gt;The medical-content gating logic&lt;/li&gt;
&lt;li&gt;The diverse genre/audience sampling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zero came back contradicted. Nothing the team found anywhere in this codebase disproves anything the paper claims about what the final model does, or how it performs. That needs to be said plainly, because it's easy for it to get lost in everything that follows: this is not a story about a model that doesn't do what it says.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3506443221870248950&quot; alt=&quot;7&quot;&gt;&lt;/p&gt;
&lt;p&gt;Four claims didn't clear the same bar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&quot;Reproducible curation pipeline&quot;&lt;/strong&gt; - Partial. The CLI exists. The training script does not appear in the main repository checkout. Three &lt;code&gt;# tmp&lt;/code&gt; markers sit on active functions. Multiple hardcoded paths make outside execution materially harder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PII replaced with fictional values&lt;/strong&gt; - Partial. Not because the team found a contradiction. The paper's own Ethics section already says, in its own words, that no post-hoc audit of instruction compliance exists.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coarse pre-screen filter&lt;/strong&gt; - Partial, for the same &lt;code&gt;# tmp&lt;/code&gt; reason as above.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3-phase, 240-billion-token training run&lt;/strong&gt; - Unverifiable. There is no training execution script anywhere in the main repository checkout. Not broken. Not incomplete. Absent. Just fragments of &lt;code&gt;sbatch&lt;/code&gt; job-submission syntax that name the phases and launch nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at where those four land against where the eight verified ones land, because the split isn't random. Every verified claim describes what the system &lt;em&gt;does&lt;/em&gt; once it's built. Every non-verified claim describes whether anyone outside Doctolib can &lt;em&gt;rebuild&lt;/em&gt; it. Twelve coin flips don't sort themselves into two clean piles by accident.&lt;/p&gt;
&lt;p&gt;One thing has to sit next to that finding before it goes any further. The paper's own README states plainly that the actual pretraining code lives in a separate &lt;code&gt;ModernBERT/&lt;/code&gt; Git submodule, credited openly to an outside open-source project, and that submodule simply was not initialized in the checkout the team audited. It is entirely possible the training script being called &quot;absent&quot; here is one &lt;code&gt;git clone --recurse-submodules&lt;/code&gt; away from existing. The team flagged this as the single highest-priority item to resolve, and it is surfaced here rather than quietly smoothed over because that is the whole point of doing this work in public.&lt;/p&gt;
&lt;p&gt;What that open question doesn't do is erase the other three. Those sit on different files, different functions, and don't depend on a submodule that was never cloned.&lt;/p&gt;
&lt;p&gt;One more thing belongs here before moving on. The model cards on HuggingFace do contain explicit intended-use boundaries: both DoctoBERT-fr and DoctoModernBERT-fr are framed as encoders for downstream NLP tasks, not medical devices, and both cards state that their outputs must not drive clinical decisions.[9] That matters. The weaker surface in this release is not the model card. It is the code repository as a reproducibility artifact.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-company-sitting-underneath-the-code&quot;&gt;The Company Sitting Underneath the Code&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=9945995640691267476&quot; alt=&quot;13&quot;&gt;&lt;br&gt;
By this point, the audit stops being only a code question.&lt;/p&gt;
&lt;p&gt;Doctolib's core business has a ceiling built into it. It's a per-professional SaaS subscription in a market with a finite number of doctors and rising local competition. The company's own numbers point at exactly where it's looking next: roughly €115 million in R&amp;amp;D spend in 2024, an AI consultation assistant already logging more than 2 million consultations, according to its own CFO.[5] DoctoBERT isn't a side project floating apart from that strategy. The paper says, in its own words, that the model was evaluated on &quot;a proprietary clinical NER task from a real-world production setting.&quot; This pipeline is already touching a live internal clinical workflow. It's not sitting safely inside an academic benchmark where the stakes are lower.&lt;/p&gt;
&lt;p&gt;Which makes the licensing asymmetry worth a second look:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model weights&lt;/strong&gt; (DoctoBERT-fr, DoctoModernBERT-fr): Apache-2.0 on HuggingFace. Open, unambiguous, free to build on commercially.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The code that produced those weights&lt;/strong&gt;: no license file at all.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Under the Berne Convention, which governs copyright across France and the EU, no license does not mean unlicensed in any casual sense. It means default copyright, all rights reserved, by operation of law. The weights are free. The pipeline that built them legally is not.&lt;/p&gt;
&lt;p&gt;Separately: in November 2025, France's competition authority fined Doctolib €4,665,000 for abusing its dominant position in online medical appointment booking. That says nothing about DoctoBERT directly, but it does confirm that Doctolib is already operating under active regulatory scrutiny as a dominant-market actor — a fact worth holding when reading the governance gaps in the code.&lt;/p&gt;
&lt;p&gt;A missing LICENSE file is genuinely one of the most common oversights in software. Most teams that skip it aren't doing it on purpose, and one missing file isn't a smoking gun on its own.&lt;/p&gt;
&lt;p&gt;It doesn't sit on its own, though. Line it up against everything else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Three live &lt;code&gt;# tmp&lt;/code&gt; markers on exactly the functions that determine reproducibility&lt;/li&gt;
&lt;li&gt;Multiple hardcoded paths into a supercomputer cluster only Doctolib has keys to&lt;/li&gt;
&lt;li&gt;An undocumented dependency chain that breaks on a missing C-extension nobody warned about&lt;/li&gt;
&lt;li&gt;A training script that, in the public checkout, simply isn't there&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every one of those facts points in the same direction, toward outside reproduction being harder than the paper's own headline sentence claims it is. Not one points the other way. Taken together, they are difficult to dismiss as random noise.&lt;/p&gt;
&lt;p&gt;There's a regulatory layer that keeps this from being purely a software-hygiene complaint. Under the EU AI Act as currently written, DoctoBERT likely clears the bar for non-applicability at this stage. The scientific-research exemption and the pre-market exemption both plausibly cover a release shaped like this one.[8] Nothing in the AI Act's high-risk categories cleanly captures a general medical encoder being fine-tuned downstream for NER. That's a defensible legal position today, and nothing here disputes it.&lt;/p&gt;
&lt;p&gt;But &quot;not legally required to be reproducible&quot; and &quot;actually reproducible&quot; are different claims. The second one starts mattering the moment a hospital procurement team asks for an auditable pipeline as a condition of doing business. So does an insurer's compliance officer. So does a government certification reviewer, exactly the customers this pivot is aimed at. The repository on GitHub right now cannot hand them one.&lt;/p&gt;
&lt;p&gt;Some of these barriers are ordinary research-code realities. GPU-bound inference, HPC paths, and version-sensitive dependencies are standard features of large-scale ML pipelines, and they are not, by themselves, enough to defeat a reproducibility claim. &lt;/p&gt;
&lt;p&gt;The stronger finding is narrower than that. Even setting infrastructure entirely aside, the repository contains code-level divergences, the &lt;code&gt;p2_short_floor&lt;/code&gt; dual default being the clearest, where the same inputs can yield different outputs depending on which entry path is used. &lt;/p&gt;
&lt;p&gt;That gap has nothing to do with whether you have access to Jean Zay. It exists inside the code itself.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;so-which-of-the-three-is-it&quot;&gt;So Which of the Three Is It&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3337280391240813971&quot; alt=&quot;14&quot;&gt;&lt;/p&gt;
&lt;p&gt;The Flamehaven team sat with the whole picture before writing any of this down. The three markers. The license asymmetry. The dependency wall. The missing training script. A company visibly pivoting toward the exact customers who will ask the hardest questions about all of it. Three explanations remain plausible from the public evidence, but they are not equally supported. Nobody on the team is going to pretend the distinction can be proved cleanly from public commits alone, because it cannot.&lt;/p&gt;
&lt;h4 id=&quot;1-the-release-debt-explanation-this-is-simply-an-unfinished-release-&quot;&gt;&lt;strong&gt;1. The release-debt explanation: this is simply an unfinished release.&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Research teams push code to GitHub the same week as a paper deadline constantly, without anyone assigned to harden it for a stranger trying to rebuild it from nothing. The &lt;code&gt;# tmp&lt;/code&gt; markers, the hardcoded cluster paths, and the missing license are exactly what shows up when an internal pipeline ships under deadline pressure and nobody circles back. Nothing here required a strategic decision. It only required a launch date.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The disclosure-boundary explanation: the release was scoped deliberately.&lt;/strong&gt; Open enough to earn the credibility of having published a method. Not open enough for anyone outside Doctolib's compute environment to fully rebuild what the paper describes. The weights carry the license that buys goodwill. The code that would let someone replicate the full process carries ambiguity instead. No deception required — just a decision, somewhere, about where the boundary of openness should sit.&lt;/p&gt;
&lt;h4 id=&quot;2-the-serious-explanation-this-was-designed-to-look-open-while-functioning-closed-&quot;&gt;&lt;strong&gt;2. The serious explanation: this was designed to look open while functioning closed.&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;The team checked this one hardest, specifically because it is the easiest to under-check out of discomfort. They did not find support for it. The prompts are in the repository in full, including the exact rewriting instructions handed to the LLM. The filtering logic is there. The job-submission scripts are there. If the goal had been to mislead outsiders into believing they had something they do not, publishing a hollow shell would have been the easier move by a wide margin. That is not what is here. What is here is real, working logic, with one specific step left undone.&lt;/p&gt;
&lt;h4 id=&quot;3-the-team-can-rule-out-that-third-explanation-with-reasonable-confidence-&quot;&gt;3. The team can rule out that third explanation with reasonable confidence.&lt;/h4&gt;
&lt;p&gt;The public evidence does not cleanly separate the first from the second. Both produce exactly the artifact sitting in this repository today, and the difference between release-hardening debt and an intentional disclosure boundary lives inside a decision at Doctolib that no public commit history will ever show.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-boundary-that-remains&quot;&gt;The Boundary That Remains&lt;/h3&gt;
&lt;p&gt;What the team can say without claiming motive is this: the gap between the paper's headline sentence and what the public can currently do with this repository is real. It is measurable. And it lands, with observable precision, exactly on the claims that determine whether anyone outside Doctolib can verify this work independently.&lt;/p&gt;
&lt;p&gt;You now have the same evidence the Flamehaven team did. Where you land on those two explanations is worth sitting with. So is the question of whether you'd land somewhere different if it were your hospital's compliance officer doing the asking, instead of an outside audit team with no stake in the outcome either way.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This audit is based on static code analysis, AST parsing, and partial runtime verification of a public GitHub repository at a fixed commit, cross-referenced against the published arXiv paper and project README. No proprietary Doctolib systems, internal infrastructure, or non-public data were accessed. Findings reflect code-observable and text-observable evidence, not a determination of intent. This is not a legal opinion.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;For readers who want to inspect the evidence trail in more detail, Flamehaven has also published two supporting artifacts.&lt;/p&gt;
&lt;p&gt;The full technical diagnostic report provides the deeper codebase review, including methodology notes, claim traceability, runtime-verified dependency findings, repository hygiene findings, and the corrected scope limitations behind this newsletter:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven.space/writing/doctobert-codebase-diagnostic-report/&quot;&gt;https://flamehaven.space/writing/doctobert-codebase-diagnostic-report/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=8555671808857497630&quot; alt=&quot;00&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The verification ledger records the STEM-BIO-AI / governance-side assessment and preserves the audit entry as a structured public evidence record:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven01.github.io/Flamehaven-Verification-Ledger/#doctobert&quot;&gt;https://flamehaven01.github.io/Flamehaven-Verification-Ledger/#doctobert&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=2028103722973095463&quot; alt=&quot;11&quot;&gt;&lt;/p&gt;
&lt;p&gt;This newsletter is the narrative summary. The report and ledger are provided for readers who want to see how the review was conducted, what was checked, and where the remaining uncertainty still sits.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;
&lt;p&gt;[1]. Biotech VC Funding Tracker 2026 - BioBucks. Disclosed biotechnology equity rounds, year to date as of June 2026.&lt;/p&gt;
&lt;p&gt;[2]. The French AI Boom You Can't Afford to Ignore in 2026 - Atera, February 2026. French tech and AI venture funding figures for 2025. (Secondary source — primary statistical sourcing pending verification.)&lt;/p&gt;
&lt;p&gt;[3]. Health &amp;amp; Healthtech in the Paris Region - Choose Paris Region. Three-year healthcare VC totals for the Paris Region.&lt;/p&gt;
&lt;p&gt;[4]. France 2030: Digital Health Acceleration Strategy - OECD.AI. France 2030 budget allocation, Health Data Hub, and Jean Zay supercomputer investment.&lt;/p&gt;
&lt;p&gt;[5]. French healthtech unicorn Doctolib hits €348m ARR, eyes profitability - Sifted, 2024. Doctolib ARR, operating loss, subscription revenue model, and growth figures.&lt;/p&gt;
&lt;p&gt;[6]. doctolib-lab/doctobert - GitHub. Repository audited at the commit referenced in this piece.&lt;/p&gt;
&lt;p&gt;[7]. Where Does the Signal Live? A Web Data Recipe for Medical Encoder Pretraining - arXiv:2606.22079, June 20, 2026.&lt;/p&gt;
&lt;p&gt;[8]. Regulation (EU) 2024/1689 (EU AI Act), Official Journal of the European Union, OJ L 2024/1689, 12 July 2024, CELEX 32024R1689 — Articles 2(6), 2(8), 2(12), 6(2), Annex III, Article 51(2).&lt;/p&gt;
&lt;p&gt;[9]. doctolib-lab/doctobert-fr-base and doctolib-lab/doctomodernbert-fr-base - HuggingFace Hub model cards. Intended-use boundaries, license (Apache-2.0), and non-clinical scope disclaimers.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21414/we-read-a-french-health-tech-giants-open-source-ai-pipeline-next-to-its-paper-and</guid>
<pubDate>Fri, 26 Jun 2026 13:52:26 +0000</pubDate>
</item>
<item>
<title>When Medical AI Benchmarks Move Faster Than Validation</title>
<link>https://coderlegion.com/20720/when-medical-ai-benchmarks-move-faster-than-validation</link>
<description>&lt;p&gt;💡 *&lt;strong&gt;Note:&lt;/strong&gt; This is not an argument to dismiss the Nature Medicine paper. It is an argument for stronger validation infrastructure around medical AI benchmarks before practice-shaping claims become settled wisdom.*&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;two-critics-two-reasonable-conclusions&quot;&gt;&lt;strong&gt;Two Critics, Two Reasonable Conclusions&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=18320604813908083521&quot; alt=&quot;2&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.nature.com/articles/s41591-026-04431-5&quot;&gt;A &lt;em&gt;Nature Medicine&lt;/em&gt; paper&lt;/a&gt; published on 12 June 2026 claimed that frontier models — GPT-5.2, Gemini 3.1 Pro, and Claude Opus 4.6 — now outperform specialized clinical AI tools like OpenEvidence and UpToDate AI across multiple medical benchmarks. The paper went viral within hours. The conclusion was treated as settled before most people had read past the abstract.[1]&lt;/p&gt;
&lt;p&gt;Two clinical readers read it carefully. They reached opposite conclusions, and both conclusions were reasonable from where each reader stood, which is exactly the problem. A post-publication conflict-of-interest allegation also surrounds the paper, and we address it below.&lt;/p&gt;
&lt;p&gt;Marissa Famularo, a vascular surgeon at Jefferson–Lehigh Valley who teaches residents, updated her practice the same day. “RAG buys provenance, not correctness,” she wrote. “Citations you can verify are not the same as a lower error rate.” She acknowledged the paper’s limits (n=100, single center, already-obsolete models) and changed her teaching anyway, because that is what engaged clinicians do when a &lt;em&gt;Nature Medicine&lt;/em&gt; paper lands.&lt;/p&gt;
&lt;p&gt;Natalie Khalil, PhD in Biomedical Engineering and developer of &lt;a rel=&quot;nofollow&quot; href=&quot;https://reviewer3.com/review/r-CFTGKB3BE1/share?pwd=yhWPWJ3CENFpBn&quot;&gt;Reviewer3&lt;/a&gt;, subjected the same paper to structured peer review and found twelve methodological problems, four of them rated Critical. Her conclusion was that the evaluation design cannot support the paper’s central claims.&lt;/p&gt;
&lt;p&gt;This piece does not argue that the paper should be dismissed. The study asks a question clinical AI vendors can no longer avoid: do specialized medical AI tools actually outperform general-purpose frontier models when tested head-to-head?&lt;/p&gt;
&lt;p&gt;That question is overdue and the paper advances it. What the paper cannot establish, and what the discussion around it has largely skipped over, is whether the evaluation design can carry the weight of the certainty now traveling through the clinical AI conversation. That is a different question, and it is the one worth sitting with.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-note-on-sources&quot;&gt;&lt;strong&gt;A Note on Sources&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The Nature Medicine paper’s abstract and methods establish the key methodological facts discussed here: the three-part evaluation design, the tested models, the 100-query RCQ benchmark, the 1,800 clinician annotations, the HealthBench LLM-judge panel, the reported Krippendorff’s alpha of 0.10–0.20 on ordinal item-level scores, and the exclusion of refusals from aggregate scoring.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://reviewer3.com/review/r-CFTGKB3BE1/share?pwd=yhWPWJ3CENFpBn&quot;&gt;Khalil’s twelve-finding review&lt;/a&gt; was conducted using Reviewer3, a structured AI-assisted peer review platform she developed. We treat the review as a primary attributed source, not as peer-reviewed in the traditional sense, and we identify it as such wherever we draw on it.&lt;/p&gt;
&lt;p&gt;OpenEvidence’s response was published as a public LinkedIn post following the paper’s release. Where we reference its conflict-of-interest allegation, we present it as OpenEvidence’s public claim and note that it has not been independently verified. The arXiv and medRxiv papers cited throughout are publicly accessible and directly relevant to the methodological concerns raised here.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-paper-claims-and-what-it-cannot-show&quot;&gt;&lt;strong&gt;What the Paper Claims and What It Cannot Show&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=9315600543213278005&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;
&lt;p&gt;The study evaluated performance across three stages: 500 MedQA questions testing medical knowledge, 500 HealthBench items measuring clinician alignment, and a Real Clinical Queries benchmark built from 100 de-identified, live-environment physician queries.&lt;/p&gt;
&lt;p&gt;To evaluate these real-world queries, twelve US clinicians produced a total of 1,800 model-question annotations.&lt;/p&gt;
&lt;p&gt;Based on these findings, the paper concluded that frontier LLMs outperformed specialized clinical AI tools across all evaluations, suggesting that scale, alignment, and cross-domain reasoning may outweigh domain-specific tuning as determinants of medical competency. [1]&lt;/p&gt;
&lt;p&gt;The study compares observed outputs under unequal conditions. It shows that frontier models performed better on the selected benchmarks under those conditions. What it does not and cannot show is why. The clinical tools are proprietary systems whose architectures, base models, retrieval pipelines, and safety configurations are inaccessible to the researchers.&lt;/p&gt;
&lt;p&gt;The observed performance gap could reflect the superiority of general-purpose scale, but it could equally reflect smaller base models in the clinical tools, poorly optimized retrieval pipelines, overly restrictive safety prompts, or the accumulated effect of the methodological asymmetries described below.&lt;/p&gt;
&lt;p&gt;Because the paper cannot isolate these variables — a point the authors themselves acknowledge, noting that “it is impossible to definitively assess a mechanistic understanding” — the conclusion about scale and alignment outweighing domain-specific tuning remains an interpretive framing that the collected data cannot confirm.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;four-places-where-the-claim-becomes-less-stable&quot;&gt;&lt;strong&gt;Four Places Where the Claim Becomes Less Stable&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&quot;1-the-ordinal-foundation-was-not-stable-enough-to-support-the-rankings&quot;&gt;1. The Ordinal Foundation Was Not Stable Enough to Support the Rankings&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=18072937140840159865&quot; alt=&quot;4&quot;&gt;&lt;/p&gt;
&lt;p&gt;The RCQ benchmark used clinician ratings on a 1–4 scale, and the reported Krippendorff’s alpha for item-level agreement was 0.10–0.20 on that ordinal scoring layer — falling below the threshold typically required to support ordinal performance ranking. It indicates that raters could not reach consensus on relative quality at the level of granularity the scale was designed to capture. [1]&lt;/p&gt;
&lt;p&gt;The paper’s Figure 2c — the primary visualization of model superiority that went viral on social media within hours of publication — is derived from the aggregate mean of discordant ordinal scores, despite the authors noting higher agreement only when collapsing the scale to binary categories or focusing on harm and hallucination flags.&lt;/p&gt;
&lt;p&gt;While those partial signals are real and should not be dismissed, the tier ranking claiming that frontier models are categorically better is built entirely on this ordinal layer, which fails to provide the adjudicative stability such a ranking requires.&lt;/p&gt;
&lt;p&gt;This pitfall aligns with a 2025 study on medical AI evaluation metrics, which demonstrated that comparing AI outputs against an aggregate of disagreeing experts produces inconsistent assessments that cannot reliably support performance ranking. [6]&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;2-the-judges-were-the-defendants-and-one-benchmark-was-built-by-one-of-them&quot;&gt;2. The Judges Were the Defendants, and One Benchmark Was Built by One of Them&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=16600731678483042882&quot; alt=&quot;5&quot;&gt;&lt;/p&gt;
&lt;p&gt;The HealthBench evaluation used an LLM-as-a-Judge approach in which the judging panel consisted entirely of the three frontier models being tested: Claude Opus 4.6, Gemini 3.1 Pro, and GPT-5.2. The specialized clinical tools were excluded from the panel. Self-preference bias in LLM judges is a known and documented limitation, and excluding the clinical tools from the judging panel is a design decision with directional consequences that the paper does not fully reckon with. [2]&lt;/p&gt;
&lt;p&gt;A further problem extends beyond Khalil’s review: HealthBench was created by OpenAI, and GPT-5.2, an OpenAI model, is one of the systems evaluated on it — a benchmark-developer overlap the Nature Medicine paper acknowledges as a potential source of grading bias, explicitly stating that HealthBench should be interpreted as “supplementary” to the primary RCQ clinician evaluation.&lt;/p&gt;
&lt;p&gt;Despite this self-designation, its results were presented as a co-equal pillar in the headline hierarchy and received as confirmatory by the public, failing to resolve the limitation’s impact — a systemic issue underscored by a 2026 scoping review which found that 73.5% of healthcare LLM-as-a-judge studies perform no bias testing, meaning high agreement scores often reflect shared blind spots rather than valid assessment. [7]&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-the-paper-acknowledges-benchmark-exposure-but-does-not-resolve-its-impact&quot;&gt;3. The Paper Acknowledges Benchmark Exposure but Does Not Resolve Its Impact&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=1027456515683063131&quot; alt=&quot;6&quot;&gt;&lt;/p&gt;
&lt;p&gt;MedQA and HealthBench have been publicly available on the internet for an extended period prior to the evaluation window. Frontier models are trained on large, continuously updated corpora of internet text. The &lt;a rel=&quot;nofollow&quot; href=&quot;https://doi.org/10.1038/s41591-026-04431-5&quot;&gt;Nature Medicine paper&lt;/a&gt; acknowledges this issue and notes that benchmark exposure is possible, but does not quantify or resolve the impact of that exposure on the headline hierarchy. [1]&lt;/p&gt;
&lt;p&gt;This does not mean the models memorized exact answers. It means the distribution of their training data may not have been independent of the evaluation distribution, and the paper leaves that question open while drawing firm conclusions from the results.&lt;/p&gt;
&lt;p&gt;If any exposure is present, it advantages exactly the systems that already benefit from the judge composition and interface asymmetry described above. The headline performance gap could be directionally real, partly artifactual, or some combination of the two. The current design cannot distinguish between them.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;4-two-statistical-issues-warrant-clarification&quot;&gt;4. Two Statistical Issues Warrant Clarification&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=15751325165623301466&quot; alt=&quot;7&quot;&gt;&lt;/p&gt;
&lt;p&gt;The regression analysis treated 1,704 rater-item observations as independent after accounting for rater effects. These observations are clustered within 100 specific clinical queries.&lt;/p&gt;
&lt;p&gt;Multiple models and raters evaluating the same query produce correlated scores due to the inherent nature and difficulty of that specific query. Failing to include a random intercept for the query introduces pseudoreplication, artificially inflating degrees of freedom and potentially generating confidence intervals narrower than the data can honestly support. [2]&lt;/p&gt;
&lt;p&gt;Separately, the paper states that UpToDate’s refusal rate of 19% was not significantly higher than Google AI Overview’s refusal rate of 6% (P=0.10), and specifies that Fisher’s exact test was used for refusal rate comparisons.&lt;/p&gt;
&lt;p&gt;A raw Fisher’s exact test on 19/100 versus 6/100 yields a two-sided p-value of approximately 0.009 — which, absent any multiple comparison adjustment, appears inconsistent with the reported P=0.10 at the paper’s own stated alpha=0.05 threshold. If a Bonferroni or other correction was applied across the full refusal-rate comparison set, that adjustment should be stated. As written, the discrepancy warrants clarification. [1]&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-compounding-asymmetries&quot;&gt;&lt;strong&gt;The Compounding Asymmetries&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4581065603568036653&quot; alt=&quot;8&quot;&gt;&lt;/p&gt;
&lt;p&gt;Beyond the four stress points, &lt;a rel=&quot;nofollow&quot; href=&quot;https://reviewer3.com/review/r-CFTGKB3BE1/share?pwd=yhWPWJ3CENFpBn&quot;&gt;Khalil’s review&lt;/a&gt; identifies design asymmetries that compound the picture without being fully addressed. Frontier models were evaluated via deterministic API outputs with temperature set to 0.0 and a fixed generation seed.&lt;/p&gt;
&lt;p&gt;Clinical tools were evaluated via non-deterministic browser interfaces with hidden system prompts and dynamic retrieval mechanisms. The paper acknowledges this asymmetry but does not fully resolve what it means for the comparison.&lt;/p&gt;
&lt;p&gt;UpToDate AI refused 19% of queries while frontier models refused 1–3%, and those refused responses were excluded from aggregate scoring. This means UpToDate’s aggregate score reflects only the subset of queries where the system was confident enough to respond, while frontier model scores reflect the full query distribution. Whether this affects the comparative result materially is not analyzed.&lt;/p&gt;
&lt;p&gt;These asymmetries do not individually overturn the paper’s findings. Cumulatively, they describe an evaluation environment whose design features, taken together, created conditions that may have favored frontier models — and the paper does not fully account for that tilt.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-disclosure-question-raised-after-publication&quot;&gt;&lt;strong&gt;The Disclosure Question Raised After Publication&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=15304289837012167569&quot; alt=&quot;10&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/posts/openevidence_rigorous-evaluation-of-medical-ai-is-good-activity-7471713099587211264-zRMx&quot;&gt;OpenEvidence’s public response&lt;/a&gt; states that the study’s authors operate a competing in-house medical AI at their hospital, and that they had previously approached OpenEvidence requesting API access, including rights to build a competing product using OpenEvidence’s own infrastructure. OpenEvidence declined. The Nature Medicine paper appeared afterward. [4]&lt;/p&gt;
&lt;p&gt;This is OpenEvidence’s claim, issued by a directly interested party, and we cannot independently verify it. If accurate, readers would reasonably expect this relationship to be disclosed or addressed in the paper’s competing interests section.&lt;/p&gt;
&lt;p&gt;It was not. We leave readers to weigh this context against the methodological picture described above. The methodological concerns stand regardless of whether the allegation is accurate, but readers are entitled to know it exists.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-counter-evidence-shows&quot;&gt;&lt;strong&gt;What the Counter-Evidence Shows&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=17461983588275750274&quot; alt=&quot;11&quot;&gt;&lt;/p&gt;
&lt;p&gt;A separate &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.medrxiv.org/content/10.64898/2026.04.23.26351526v1&quot;&gt;medRxiv study&lt;/a&gt; applied the same triage benchmark that previously exposed severe weaknesses in ChatGPT Health (51.6% undertriage of true emergencies) to OpenEvidence under identical conditions. OpenEvidence undertriaged 12.5% of emergencies, a fourfold reduction.&lt;/p&gt;
&lt;p&gt;It showed no social anchoring effect. Its errors skewed toward safer directions, and refusals occurred only in symptom-only prompts, never in urgent or emergency cases. [5]&lt;/p&gt;
&lt;p&gt;This does not prove that OpenEvidence is superior to frontier models in clinical settings. It shows something narrower but more important for this discussion: benchmark selection in medical AI is never a neutral methodological choice, especially when the benchmark design includes public dataset exposure, self-judging panels, and frontier-sourced query distributions that may favor the very models being evaluated.&lt;/p&gt;
&lt;p&gt;When a different benchmark applied by independent, conflict-free researchers produces a meaningfully different picture of the same tool, it becomes clear that neither study is definitive, and that the headline hierarchy is far more sensitive to evaluation design than the paper’s framing acknowledges.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-governance-gap-in-miniature&quot;&gt;&lt;strong&gt;The Governance Gap in Miniature&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Famularo updated her teaching the day the paper appeared, which is what engaged clinicians should do when a Nature Medicine paper lands. Her update was calibrated and practically useful: RAG buys provenance, not correctness. Check the source. Don’t trust the absence of hallucination. These are good heuristics. She flagged the caveats. She called it a snapshot, not a verdict. [3]&lt;/p&gt;
&lt;p&gt;The structured peer review that identified the paper’s pressure points arrived days later, from a specialist who had built a tool specifically designed to find them. Most papers do not get that scrutiny. Most clinical practice updates do not wait for it.&lt;/p&gt;
&lt;p&gt;Publication, uptake, critique, too late. That sequence is not a failure of the clinician who updated her teaching, or the reviewer who found the flaws, or even the authors who published the paper. It is the operating condition of medical AI evaluation in 2026, and it will keep producing the same outcome until the field decides that the speed of the claim and the robustness of the validation have to move together.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-this-means&quot;&gt;&lt;strong&gt;What This Means&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4452287961634227821&quot; alt=&quot;12&quot;&gt;&lt;/p&gt;
&lt;p&gt;The paper’s headline finding may be directionally correct. Frontier models may genuinely perform better than current specialized clinical tools on the tasks this benchmark measures. The evaluation design, as it stands, cannot fully establish that claim, and it especially cannot establish the mechanistic conclusion that scale and alignment outweigh domain-specific tuning as determinants of medical competency.&lt;/p&gt;
&lt;p&gt;What the paper establishes more clearly — and perhaps more durably — is the shaky infrastructure upon which it was built. It describes a system in which performance hierarchies are generated from ordinal ratings despite near-zero inter-rater agreement, models are evaluated on benchmarks that some of them helped design, and judgments are rendered by panels composed of the models themselves.&lt;/p&gt;
&lt;p&gt;Benchmark exposure and interface asymmetries are acknowledged but left unquantified or unresolved, while survivorship bias in refusal exclusions and a post-publication conflict-of-interest allegation remain largely unanalyzed.&lt;/p&gt;
&lt;p&gt;These are not incidental weaknesses in one paper. They describe the available toolkit for high-profile medical AI evaluation right now, at the same moment clinical AI tools are moving from research conversation into hospital procurement and daily clinical workflow.&lt;/p&gt;
&lt;p&gt;The danger is not that one paper went viral. The danger is that clinical AI evaluation now produces practice-shaping claims faster than the field can audit the machinery behind them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-auditing-should-require&quot;&gt;&lt;strong&gt;What Auditing Should Require&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=1681796334860189055&quot; alt=&quot;13&quot;&gt;&lt;/p&gt;
&lt;p&gt;At minimum, auditing that machinery should require independent judge panels not drawn from the evaluated systems, pre-registration of benchmark contamination checks, and refusal-inclusive scoring that does not selectively filter the hardest queries out of the comparison.&lt;/p&gt;
&lt;p&gt;None of these are technically difficult. They are choices. And until they become expected choices, the gap between claim speed and validation depth will remain a feature, not a bug, of how medical AI is evaluated and published.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;references-1&quot;&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Vishwanath, K. et al. “&lt;a rel=&quot;nofollow&quot; href=&quot;https://doi.org/10.1038/s41591-026-04431-5&quot;&gt;General-purpose large language models outperform specialized clinical AI tools on medical benchmarks&lt;/a&gt;.” &lt;em&gt;Nature Medicine&lt;/em&gt; (12 June 2026).&lt;/li&gt;
&lt;li&gt;Khalil, N. “&lt;a rel=&quot;nofollow&quot; href=&quot;https://reviewer3.com/review/r-CFTGKB3BE1/share?pwd=yhWPWJ3CENFpBn&quot;&gt;Reviewer3 structured peer review&lt;/a&gt; of the above.” Publicly shared (June 2026).&lt;/li&gt;
&lt;li&gt;Famularo, M. LinkedIn response to the above (June 2026).&lt;/li&gt;
&lt;li&gt;OpenEvidence. “&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/posts/openevidence_rigorous-evaluation-of-medical-ai-is-good-activity-7471713099587211264-zRMx&quot;&gt;Public LinkedIn response and conflict of interest statement&lt;/a&gt;” (June 2026).&lt;/li&gt;
&lt;li&gt;Jia, E. et al. “&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.medrxiv.org/content/10.64898/2026.04.23.26351526v1&quot;&gt;OpenEvidence errs on the safe side in a structured test of triage recommendations&lt;/a&gt;.” &lt;em&gt;medRxiv&lt;/em&gt; (April 2026).&lt;/li&gt;
&lt;li&gt;Kopanichuk et al. “&lt;a rel=&quot;nofollow&quot; href=&quot;https://arxiv.org/abs/2509.11941&quot;&gt;How to Evaluate Medical AI&lt;/a&gt;.” arXiv:2509.11941 (2025).&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://arxiv.org/abs/2604.25933&quot;&gt;“A Scoping Review of LLM-as-a-Judge in Healthcare and the MedJUDGE Framework&lt;/a&gt;.” arXiv:2604.25933 (2026).&lt;/li&gt;
&lt;/ol&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/20720/when-medical-ai-benchmarks-move-faster-than-validation</guid>
<pubDate>Tue, 16 Jun 2026 15:36:37 +0000</pubDate>
</item>
<item>
<title>Beyond M15: Why STEM BIO-AI Started Acting More Like a Governance Report in v1.8.x</title>
<link>https://coderlegion.com/20388/beyond-m15-why-stem-bio-ai-started-acting-more-like-a-governance-report-in-v1-8-x</link>
<description>&lt;h3 id=&quot;not-just-a-new-framework-but-a-clearer-answer-to-what-the-score-means-why-the-report-exists-and-how-the-artifact-should-be-read-&quot;&gt;&lt;strong&gt;Not just a new framework, but a clearer answer to what the score means, why the report exists, and how the artifact should be read.&lt;/strong&gt;&lt;/h3&gt;
&lt;hr&gt;
&lt;p&gt;The real change in &lt;code&gt;v1.8.0&lt;/code&gt; through &lt;code&gt;v1.8.4&lt;/code&gt; was not that STEM BIO-AI cited one more framework.&lt;/p&gt;
&lt;p&gt;The real change was that it became harder to misread the report.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;M15&lt;/code&gt; mattered. It strengthened the regulatory-traceability vocabulary. But the deeper shift was broader: &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the tool got stricter about what it was willing to imply from local repository evidence, and the report got more explicit about why each surface exists at all.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That changed the project in three ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;it stopped behaving like a score sheet that developers happened to inspect&lt;/li&gt;
&lt;li&gt;it integrated &lt;code&gt;M15&lt;/code&gt; as a bounded post-hoc traceability layer rather than a hidden score driver&lt;/li&gt;
&lt;li&gt;it treated release memory, packaging, and public report surfaces as part of release integrity rather than mere maintenance hygiene&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is the real post-M15 story.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2fm177lzsfwr2gpnb6e0.png&quot; alt=&quot;cover&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-1-perception-why-stem-bio-ai-should-not-be-read-as-a-simple-score-tool&quot;&gt;Part 1. Perception: Why STEM BIO-AI Should Not Be Read as a Simple Score Tool&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/686q01btrkc49rt5m3n1.png&quot; alt=&quot;2&quot;&gt;&lt;/p&gt;
&lt;p&gt;The hardest reporting problem in the &lt;code&gt;v1.8.x&lt;/code&gt; line was no longer only &lt;strong&gt;how to show something&lt;/strong&gt; or even &lt;strong&gt;what to show&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It was &lt;strong&gt;why to show it at all&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That distinction matters because the same report is read by different people for different reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a prospective user wants to know whether the repository is trustworthy enough to try&lt;/li&gt;
&lt;li&gt;a maintainer wants to know what is holding the score down and what to fix first&lt;/li&gt;
&lt;li&gt;a reviewer or auditor wants to know which claims are supported, which are overstated, and which remain outside scope&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If those audiences all receive the same fields without a visible purpose hierarchy, the result is machine-legible but human-misleading.&lt;/p&gt;
&lt;p&gt;That is why the recent report changes should be understood as &lt;strong&gt;user-friendliness in a governance sense&lt;/strong&gt;, not as design polish.&lt;/p&gt;
&lt;p&gt;The project had to become better at stopping readers from confusing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a deterministic score with a safety verdict&lt;/li&gt;
&lt;li&gt;a traceability mapping with compliance proof&lt;/li&gt;
&lt;li&gt;a code-integrity &lt;code&gt;PASS&lt;/code&gt; with overall repository maturity&lt;/li&gt;
&lt;li&gt;a compact report surface with complete evidence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That realization changed the output layer itself.&lt;/p&gt;
&lt;p&gt;Recent report work added or strengthened several surfaces specifically to solve that perception problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a fixed score-boundary note near the score itself&lt;/li&gt;
&lt;li&gt;explicit &lt;code&gt;Tier Lock&lt;/code&gt; and &lt;code&gt;Classification Applied&lt;/code&gt; surfaces so score constraints are not hidden&lt;/li&gt;
&lt;li&gt;stronger &lt;code&gt;Governance Posture&lt;/code&gt;, &lt;code&gt;What Is Actually Present&lt;/code&gt;, and &lt;code&gt;What Is Missing Or Contradicted&lt;/code&gt; summaries&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Regulatory Traceability&lt;/code&gt; placed ahead of the MIT AI Risk Repository (AIRI), used here as a secondary risk-vocabulary layer, so the reader sees repository-to-framework mapping before the broader risk language&lt;/li&gt;
&lt;li&gt;clearer chapter hierarchy in the detailed PDF so the report reads like a governance document instead of a detector dump&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In concrete terms, that changed the reader's path through the artifact.&lt;/p&gt;
&lt;p&gt;Instead of landing first on a score and then digging through detector output, the current report leads with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Governance Posture&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;About This Score&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;What Is Actually Present&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;What Is Missing Or Contradicted&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Regulatory Traceability&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AIRI Risk Triggers&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only after that does it move into &lt;code&gt;Decision Path&lt;/code&gt;, &lt;code&gt;Top Remediation Actions&lt;/code&gt;, &lt;code&gt;Code Integrity details&lt;/code&gt;, and &lt;code&gt;Evidence detail&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The key lesson was simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a report becomes more useful not when it shows more fields, but when the reason those fields exist becomes legible to the reader.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is also why the score disclaimer mattered so much:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Score reflects calculation integrity, not calibrated validity. Triage signal only.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That sentence is not ornamental. It forces the system to tell the truth about itself.&lt;/p&gt;
&lt;p&gt;What is verified:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;calculation integrity&lt;/li&gt;
&lt;li&gt;deterministic reproducibility&lt;/li&gt;
&lt;li&gt;transparent score assembly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What is not verified:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;calibrated measurement validity&lt;/li&gt;
&lt;li&gt;runtime behavior correctness&lt;/li&gt;
&lt;li&gt;clinical safety&lt;/li&gt;
&lt;li&gt;compliance or regulatory clearance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the most important perception shift in the &lt;code&gt;v1.8.x&lt;/code&gt; line.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mx4p534t8fev02422dup.png&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;
&lt;p&gt;The project is no longer trying only to answer, “What score did this repository get?”&lt;/p&gt;
&lt;p&gt;It is trying to answer something more useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is bio-governance actually present?&lt;/li&gt;
&lt;li&gt;Is it adequate relative to the repository’s claims?&lt;/li&gt;
&lt;li&gt;What is verified, what is inferred, and what is still missing?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Figure 1. The report now places governance posture, score-boundary language, and top-level trust signals near the score surface instead of hiding them behind lower-level detector output.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-2-what-m15-is-why-it-matters-and-how-stem-bio-ai-uses-it&quot;&gt;Part 2. What M15 Is, Why It Matters, and How STEM BIO-AI Uses It&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3kv3g2nva28gfu7x8ap0.png&quot; alt=&quot;5&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;M15&lt;/code&gt; refers to &lt;strong&gt;ICH M15: General Principles for Model-Informed Drug Development&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The official FDA guidance page is here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.fda.gov/regulatory-information/search-fda-guidance-documents/m15-general-principles-model-informed-drug-development&quot;&gt;FDA: M15 General Principles for Model-Informed Drug Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As the FDA describes it, the June 2026 final guidance was prepared under the auspices of the International Council for Harmonisation and provides general recommendations for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;planning model-informed drug development evidence&lt;/li&gt;
&lt;li&gt;model evaluation&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;regulatory interactions&lt;/li&gt;
&lt;li&gt;reporting and submission&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also establishes a harmonized assessment framework and terminology for MIDD evidence. That matters because it gives a cleaner language for talking about traceability, documentation quality, and context of use.&lt;/p&gt;
&lt;p&gt;But the important thing in STEM BIO-AI is not merely that &lt;code&gt;M15&lt;/code&gt; appears in the output.&lt;/p&gt;
&lt;p&gt;The important thing is &lt;strong&gt;how&lt;/strong&gt; it appears.&lt;/p&gt;
&lt;p&gt;STEM BIO-AI does &lt;strong&gt;not&lt;/strong&gt; use &lt;code&gt;M15&lt;/code&gt; as a covert score driver. It does not inflate the formal score because an &lt;code&gt;M15&lt;/code&gt; citation exists. It uses &lt;code&gt;M15&lt;/code&gt; as a &lt;strong&gt;post-hoc regulatory traceability layer&lt;/strong&gt; attached to already-detected repository evidence.&lt;/p&gt;
&lt;p&gt;That boundary matters.&lt;/p&gt;
&lt;p&gt;Without it, a framework citation can easily become a kind of rhetorical overclaim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the report looks more regulatory than it really is&lt;/li&gt;
&lt;li&gt;the reader assumes framework mention implies compliance maturity&lt;/li&gt;
&lt;li&gt;traceability begins to masquerade as proof&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The post-M15 line was careful to avoid that mistake.&lt;/p&gt;
&lt;p&gt;In practice, the project used &lt;code&gt;M15&lt;/code&gt; in a bounded way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;as part of &lt;code&gt;measurement_basis&lt;/code&gt; and regulatory framing&lt;/li&gt;
&lt;li&gt;as a traceability surface that helps interpret repository evidence&lt;/li&gt;
&lt;li&gt;as a complementary reference alongside EU AI Act, IMDRF, and FDA guidance themes&lt;/li&gt;
&lt;li&gt;not as a direct input that changes the formal score formula&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That changed real artifact fields.&lt;/p&gt;
&lt;p&gt;The post-M15 line now surfaces traceability in places such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;human-readable &lt;code&gt;Regulatory Traceability&lt;/code&gt; sections in HTML, Markdown, explain, and PDF&lt;/li&gt;
&lt;li&gt;framework-grouped labels such as &lt;code&gt;EU AI Act&lt;/code&gt;, &lt;code&gt;ICH M15&lt;/code&gt;, &lt;code&gt;IMDRF&lt;/code&gt;, and &lt;code&gt;FDA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;status-oriented summaries such as &lt;code&gt;Signal only&lt;/code&gt;, &lt;code&gt;Partially aligned&lt;/code&gt;, and &lt;code&gt;Aligned&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;explicit &lt;code&gt;source_ids&lt;/code&gt; and &lt;code&gt;finding_refs&lt;/code&gt; so a reader can trace which repository signal triggered which regulatory mapping&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why the right way to describe the integration is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M15 strengthened traceability language and reporting context, but it did not become the hidden engine of the score.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is also consistent with how FDA guidance should be read. FDA's own Federal Register notice states that guidance documents do not establish legally enforceable responsibilities; they describe the Agency's current thinking and should be read as recommendations unless specific statutory or regulatory requirements are cited. See the June 3, 2026 Federal Register notice for M15: &lt;a rel=&quot;nofollow&quot; href=&quot;https://regulations.justia.com/regulations/fedreg/2026/06/03/2026-11112.html&quot;&gt;https://regulations.justia.com/regulations/fedreg/2026/06/03/2026-11112.html&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This distinction also helped the report become more honest.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Regulatory Traceability&lt;/code&gt; is useful because it tells a reviewer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which frameworks the observed evidence touches&lt;/li&gt;
&lt;li&gt;which mappings are only signal-level&lt;/li&gt;
&lt;li&gt;which are partially aligned&lt;/li&gt;
&lt;li&gt;what the report still cannot claim&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is exactly where a framework like &lt;code&gt;M15&lt;/code&gt; belongs in this system: as a bounded interpretive layer that helps a reader connect local repository signals to external governance language more carefully.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nzu5z9a16d5wmzte6iio.png&quot; alt=&quot;6&quot;&gt;&lt;/p&gt;
&lt;p&gt;Regulatory traceability now shows framework-grouped mappings, bounded statuses, and trigger-linked references, making it easier to see how local repository evidence touches M15, EU AI Act, IMDRF, and FDA guidance themes without mistaking those mappings for compliance proof.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d90mq26ogcn5vphcp2p9.jpg&quot; alt=&quot;sample7p&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;part-3-the-other-improvements-that-actually-made-the-tool-more-mature&quot;&gt;Part 3. The Other Improvements That Actually Made the Tool More Mature&lt;/h3&gt;
&lt;p&gt;After the M15 integration, three other changes mattered just as much, and in some cases more.&lt;/p&gt;
&lt;h4 id=&quot;3-1-the-tool-stopped-hiding-score-constraints&quot;&gt;3.1 The Tool Stopped Hiding Score Constraints&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13fyu6eurjnkocwuz5kc.png&quot; alt=&quot;7&quot;&gt;&lt;/p&gt;
&lt;p&gt;One of the biggest interpretability problems in earlier versions was that a report could be capped or floored without making that state obvious enough in the human-readable artifact.&lt;/p&gt;
&lt;p&gt;That is what led to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Tier Lock [CA-CAP]&lt;/code&gt;, the clinical-adjacent score-cap state&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Tier Lock [T0-FLOOR]&lt;/code&gt;, the hard-floor state for stronger direct clinical concern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Classification Applied&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These surfaces changed the meaning of the report.&lt;/p&gt;
&lt;p&gt;They tell the reader that the formal score is not just an arithmetic total. It is also shaped by active classification state:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether the repository is clinical-adjacent&lt;/li&gt;
&lt;li&gt;whether an explicit non-clinical boundary is missing&lt;/li&gt;
&lt;li&gt;whether a score ceiling is active&lt;/li&gt;
&lt;li&gt;whether a hard-floor review path has been triggered&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This made the report more inspectable, but more importantly, it made the report less willing to hide the reasons a higher tier is blocked.&lt;/p&gt;
&lt;p&gt;That matters because remediation is not always “add more points.”&lt;/p&gt;
&lt;p&gt;Sometimes the real issue is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;remove the condition that prevents the repository from being meaningfully read as governance-ready&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a better audit posture than a naked scalar score.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9lud9o3dxx1q0phvqems.jpg&quot; alt=&quot;sample1p&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-2-the-report-became-a-governance-document-instead-of-a-score-sheet&quot;&gt;3.2 The Report Became a Governance Document Instead of a Score Sheet&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lupq2dm2ivbiu6myut5a.png&quot; alt=&quot;4&quot;&gt;&lt;/p&gt;
&lt;p&gt;This was the most visible change to anyone reading the artifacts.&lt;/p&gt;
&lt;p&gt;The detailed packet stopped feeling like a machine-oriented export and started behaving more like a governance-suitability document.&lt;/p&gt;
&lt;p&gt;The current packet is built around a more explicit hierarchy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Governance Posture&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;What Is Actually Present&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;What Is Missing Or Contradicted&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Regulatory Traceability&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AIRI Risk Triggers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Method Boundary&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The current detailed packet is chaptered as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Chapter 1 — Stage Scorecard and Governance Scoring&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chapter 2 — Code Integrity Deep Analysis&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chapter 3 — Regulatory Traceability&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chapter 4 — Remediation Actions, AIRI Risk Triggers &amp;amp; Method Boundary&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chapter 5 — Report Metadata&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The HTML report similarly exposes a seven-section navigation path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Summary&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Decision Path&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Code Integrity&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Regulatory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AIRI Risk Triggers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Evidence&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Developer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those labels matter because they changed what the reader sees first and what the reader is expected to conclude from the artifact. The reader now moves through adequacy, contradiction, traceability, and scope before falling back to engineering detail.&lt;/p&gt;
&lt;p&gt;Only after that does the packet lean into deeper developer-facing material such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Decision Path&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Top Remediation Actions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Code Integrity details&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Evidence detail&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That reordering matters because the report’s first job is not to help a maintainer debug detectors. Its first job is to answer whether bio-governance is actually present, whether it is adequate relative to claims, and what remains unsupported or missing.&lt;/p&gt;
&lt;p&gt;That is why the current packet structure is more than presentation work. It is a statement about document type: a governance artifact with&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a posture statement&lt;/li&gt;
&lt;li&gt;explicit scope limits&lt;/li&gt;
&lt;li&gt;traceability context&lt;/li&gt;
&lt;li&gt;contradiction surfaces&lt;/li&gt;
&lt;li&gt;remediation direction&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-3-mica-packaging-and-release-surfaces-became-release-integrity-work&quot;&gt;3.3 MICA, Packaging, and Release Surfaces Became Release Integrity Work&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lgrhygtg0ylb460w9apa.png&quot; alt=&quot;8&quot;&gt;&lt;/p&gt;
&lt;p&gt;The final maturation step was less glamorous, but it mattered a great deal.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;v1.8.x&lt;/code&gt;, active memory pointers, public version surfaces, preview assets, and package-data inclusion became impossible to treat as optional housekeeping.&lt;/p&gt;
&lt;p&gt;If the release says one thing while:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MICA&lt;/code&gt;, the project's active release-memory layer, points somewhere else&lt;/li&gt;
&lt;li&gt;packaged assets omit active files&lt;/li&gt;
&lt;li&gt;report previews lag behind the actual runtime&lt;/li&gt;
&lt;li&gt;public docs describe stale behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;then the tool is not governed. It is merely assembled.&lt;/p&gt;
&lt;p&gt;That is why post-M15 work spent real effort on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rotating the active MICA trio cleanly&lt;/li&gt;
&lt;li&gt;pruning live historical memory surfaces while preserving provenance in Git-tagged history&lt;/li&gt;
&lt;li&gt;making report previews match the actual runtime output&lt;/li&gt;
&lt;li&gt;hardening package-data and release-surface alignment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The practical examples here are not abstract:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;README&lt;/code&gt; level tables and actual packet filenames had to agree on &lt;code&gt;8p&lt;/code&gt;, not &lt;code&gt;7p&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;tracked preview assets had to match the real generated HTML and PDF outputs&lt;/li&gt;
&lt;li&gt;active &lt;code&gt;MICA&lt;/code&gt; pointers had to reference the same live trio the package actually shipped&lt;/li&gt;
&lt;li&gt;public docs had to stop describing stale section counts or old packet shapes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Small mismatches matter here because governance tools are judged by their own traceability discipline. If a report surface says &lt;code&gt;8p&lt;/code&gt; while the surrounding docs still describe &lt;code&gt;7p&lt;/code&gt;, the tool teaches the wrong lesson about its own evidence hygiene.&lt;/p&gt;
&lt;p&gt;This sounds operational because it is. But it is also methodological.&lt;/p&gt;
&lt;p&gt;A governance scanner that critiques target repositories for stale surfaces, unsupported claims, or weak provenance cannot remain credible if its own release memory and public artifact surfaces drift by version.&lt;/p&gt;
&lt;p&gt;That is why the packaging and memory work belongs in the same story as the report work.&lt;/p&gt;
&lt;p&gt;It reduced the number of places where truth could fork.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;where-this-leaves-the-project&quot;&gt;Where This Leaves the Project&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2drz2titirm380osf4r1.png&quot; alt=&quot;9&quot;&gt;&lt;/p&gt;
&lt;p&gt;If I had to summarize the post-M15 line in one sentence, it would be this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STEM BIO-AI became less willing to let a convenient surface pretend to be the whole truth.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That shows up in several places at once:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the score is now shown with clearer purpose boundaries&lt;/li&gt;
&lt;li&gt;score constraints are surfaced instead of buried&lt;/li&gt;
&lt;li&gt;&lt;code&gt;M15&lt;/code&gt; appears as traceability, not as covert score inflation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AIRI&lt;/code&gt; is framed as secondary risk vocabulary, not proof&lt;/li&gt;
&lt;li&gt;the packet now behaves more like a governance document&lt;/li&gt;
&lt;li&gt;release memory and packaging are treated as release-integrity concerns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The tool is still bounded and deterministic. It still cannot see runtime truth, wet-lab reproducibility, model-output correctness, or clinical validation.&lt;/p&gt;
&lt;p&gt;But in the &lt;code&gt;v1.8.x&lt;/code&gt; line, it got better at saying exactly that.&lt;/p&gt;
&lt;p&gt;And it got better at saying it in a form that a prospective user, a maintainer, and a reviewer can all use without needing to reverse-engineer the internal taxonomy first.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;roadmap&quot;&gt;Roadmap&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u77ytdlvcs0xrkoz1i1u.png&quot; alt=&quot;10&quot;&gt;&lt;/p&gt;
&lt;p&gt;The next maturity steps are not only more detectors.&lt;/p&gt;
&lt;p&gt;They are also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;improving human-readable explanations without overstating certainty&lt;/li&gt;
&lt;li&gt;expanding the behavioral and path-sensitive side of static analysis without pretending it is dynamic truth&lt;/li&gt;
&lt;li&gt;broadening benchmark calibration so score validity is less prior-heavy&lt;/li&gt;
&lt;li&gt;continuing to align report purpose, release memory, and public surfaces so the artifact remains hard to misread&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the real roadmap after M15.&lt;/p&gt;
&lt;p&gt;Not just more coverage.&lt;/p&gt;
&lt;p&gt;More disciplined meaning.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lty80m9umf7b13s0qagp.png&quot; alt=&quot;repo&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repository: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/flamehaven01/STEM-BIO-AI&quot;&gt;https://github.com/flamehaven01/STEM-BIO-AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Live HF Space: &lt;a rel=&quot;nofollow&quot; href=&quot;https://huggingface.co/spaces/Flamehaven/stem-bio-ai&quot;&gt;https://huggingface.co/spaces/Flamehaven/stem-bio-ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/20388/beyond-m15-why-stem-bio-ai-started-acting-more-like-a-governance-report-in-v1-8-x</guid>
<pubDate>Fri, 12 Jun 2026 10:23:48 +0000</pubDate>
</item>
<item>
<title>We Built AI Verification Infrastructure. Then It Found Our Blind Spots.</title>
<link>https://coderlegion.com/19525/we-built-ai-verification-infrastructure-then-it-found-our-blind-spots</link>
<description>&lt;h3 id=&quot;prologue-the-mirage-amp-the-pivot&quot;&gt;Prologue: The Mirage &amp;amp; The Pivot&lt;/h3&gt;
&lt;p&gt;In the summer of 2024, our team began with an ambition that felt almost impossible: to use frontier AI for drug discovery, theoretical physics, and problems that seemed unreachable. We imagined systems that could reason about spacetime geometries and propose novel small-molecule bindings.&lt;/p&gt;
&lt;p&gt;Within the first month, the boundary became clear. The models were powerful, but their claims were not something we could responsibly stand behind unless the path from input to result could be inspected.&lt;/p&gt;
&lt;p&gt;So we made a choice. We could keep producing evocative claims we could not verify, or we could build infrastructure that would force our own work through the same scrutiny we would apply to anyone else's.&lt;/p&gt;
&lt;p&gt;We stopped. We built.&lt;/p&gt;
&lt;p&gt;For the last two years, we pursued this work without revenue. The original ambition was larger than the system we are publishing now, but the work became more precise. We began turning model-generated reasoning into executable Python harnesses, custody records, and governance gates before we had stable language for what to call them.&lt;/p&gt;
&lt;p&gt;The practical question became narrower: can scientific claims expose the path by which they were generated, and can biomolecular AI systems be evaluated for transparency before their outputs are treated as evidence?&lt;/p&gt;
&lt;p&gt;We shared progress publicly on dev.to, LinkedIn, Substack, Medium, and CoderLegion, usually one to three times a week. Most posts did not travel far. They were part research log, part signal flare, and part attempt to decide what should remain protected and what should be released.&lt;/p&gt;
&lt;p&gt;Over time, the answer became clearer: protect the sensitive core, but publish verification surfaces, audit artifacts, and reproducible paths wherever possible.&lt;/p&gt;
&lt;p&gt;We are not claiming to have solved drug discovery or the Theory of Everything. We are publishing the verification materials because even a small piece of reliable infrastructure may help others near those frontiers.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-flamehaven-verification-ledger-is&quot;&gt;What the Flamehaven Verification Ledger Is&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=8699558995807389173&quot; alt=&quot;1&quot;&gt;&lt;/p&gt;
&lt;p&gt;That choice — to verify before we believe — became the whole of what we built. Everything in the Flamehaven Verification Ledger answers one question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can this claim show the path by which it came to exist?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A mathematical or scientific claim earns operational trust only once the path behind it can be inspected, reproduced, or challenged.&lt;/p&gt;
&lt;p&gt;A biomolecular AI pipeline is trusted only when its disagreements are surfaced, not smoothed over.&lt;/p&gt;
&lt;p&gt;A bioscience repository is cleared only once its safety is checked line by line, with no model in the scoring loop.&lt;/p&gt;
&lt;p&gt;Verification is not a feature here. It is the spine.&lt;/p&gt;
&lt;p&gt;The ledger is public and inspectable by design. Each run is published as a bounded artifact: inputs, a score, a report, a traceable custody path, and, when it happens, a failure note.&lt;/p&gt;
&lt;p&gt;Today it has three main verification lanes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;EQA — Equation-to-Artifact.&lt;/strong&gt; Mathematical and physical claims are turned into runnable, deterministic Python checks, including string-theory beta-function tests at 200-bit precision and the OpenAI Erdos reproduction.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BAV — Biomolecular AI Validation.&lt;/strong&gt; Biomolecular pipelines are evaluated as governed systems, not just prediction engines. Model disagreement is treated as a safety signal rather than noise.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BSC — Bioscience Compliance.&lt;/strong&gt; The open-source STEM-BIO-AI scanner runs local, zero-execution safety and compliance scans of bioscience repositories and maps findings to external risk and traceability frameworks, with no LLM in the scoring path.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open resources are rolling out as they are cleared for public release.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven01.github.io/Flamehaven-Verification-Ledger/&quot;&gt;Public ledger&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-two-years-produced-and-what-it-cost-our-beliefs&quot;&gt;What Two Years Produced — and What It Cost Our Beliefs&lt;/h3&gt;
&lt;p&gt;This is the part that matters. Two years of runs left a body of results: some held up under scrutiny, and some broke beliefs we were attached to.&lt;/p&gt;
&lt;p&gt;A verification engine earns credibility from both: results that survive and failures that tell us when we are wrong.&lt;/p&gt;
&lt;h4 id=&quot;success-1-geometry-overruled-the-narrative&quot;&gt;Success 1: Geometry Overruled the Narrative&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=12316925683447817036&quot; alt=&quot;2&quot;&gt;&lt;/p&gt;
&lt;p&gt;The EQA lane showed something important in TOE-TEST-0004: it judged a background by its geometry, not by the words attached to it.&lt;/p&gt;
&lt;p&gt;The test was built around Green-Schwarz anomaly cancellation, where the gravitational and gauge Pontryagin densities must match:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;p1_R = p1_F
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two adversarial cases made the point.&lt;/p&gt;
&lt;p&gt;A Schwarzschild black hole carrying a single-plane gauge field sounds like an anomaly waiting to happen. The engine returned PASS (&lt;code&gt;Omega = 0.9997&lt;/code&gt;) because Schwarzschild is Ricci-flat (&lt;code&gt;p1_R = 0&lt;/code&gt;) and a single-plane field is topologically trivial (&lt;code&gt;p1_F = 0&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Flat 10-D Minkowski space sounds harmless. But with a two-plane gauge field, it returned FAIL:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;p1_F = 2.0 != p1_R = 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Without curvature, there is nothing to cancel the gauge anomaly. The ledger did not reward the background for sounding safe, nor punish it for sounding dangerous. It ran the case.&lt;/p&gt;
&lt;h4 id=&quot;success-2-calibration-is-not-understanding&quot;&gt;Success 2: Calibration Is Not Understanding&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3668774151536386297&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;
&lt;p&gt;EXP-028 was built to catch a different confusion: a model can be beautifully calibrated and still not understand what it is looking at.&lt;/p&gt;
&lt;p&gt;On the surface, the model looked excellent. Brier score improved from &lt;code&gt;0.204&lt;/code&gt; to &lt;code&gt;0.0056&lt;/code&gt; after calibration. AUC was &lt;code&gt;1.0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;By standard calibration metrics, this is the kind of model you might trust. But the cross-domain honesty gate refused it.&lt;/p&gt;
&lt;p&gt;SR9 was about &lt;code&gt;0.26&lt;/code&gt; against a gate of &lt;code&gt;&amp;gt;= 0.80&lt;/code&gt;. DI2 was about &lt;code&gt;0.61&lt;/code&gt; against a gate of &lt;code&gt;&amp;lt;= 0.20&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So the pipeline did the rare thing: it returned &quot;I cannot resolve this&quot; and abstained, rather than let a well-calibrated number masquerade as comprehension.&lt;/p&gt;
&lt;p&gt;Calibration measures whether confidence is honest about frequency. It does not prove understanding.&lt;/p&gt;
&lt;p&gt;*SR9 and DI2 are advisory heuristics, not externally validated physical quantities. That boundary matters.&lt;/p&gt;
&lt;h4 id=&quot;success-3-a-repository-scored-against-a-traceability-rubric-deterministically&quot;&gt;Success 3: A Repository Scored Against a Traceability Rubric, Deterministically&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3012080647899356523&quot; alt=&quot;4&quot;&gt;&lt;/p&gt;
&lt;p&gt;The third success is the least glamorous and the most reusable: a real bioscience repository scored against external traceability concerns by code anyone can re-run.&lt;/p&gt;
&lt;p&gt;Our open-source scanner STEM-BIO-AI (&lt;code&gt;pip install stem-ai&lt;/code&gt;) reads observable signals and grades three rubrics:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;S1 = README / intent evidence
S2 = repo-local consistency
S3 = code / bio responsibility
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;They combine into a deterministic weighted score, with penalties and hard caps where needed:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;raw = round(0.4*S1 + 0.2*S2 + 0.4*S3 - risk_penalty)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For &lt;code&gt;yorkeccak/bio&lt;/code&gt;, the scan produced a final score of &lt;code&gt;48&lt;/code&gt;, mapped to &lt;code&gt;T1 Quarantine&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The point is how the number is reached: README intent, repo-local consistency, dependency safety, exception handling, data provenance, clinical disclaimers, and AST-level code analysis using &lt;code&gt;ast.parse&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Nothing in the target repo is executed. No network, no GPU, no model in the loop. The audit runs locally and reproduces from repository state.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-failures-we-are-publishing&quot;&gt;The Failures We Are Publishing&lt;/h3&gt;
&lt;h4 id=&quot;failure-0-synthetic-data-in-our-own-ledger&quot;&gt;Failure 0: Synthetic Data in Our Own Ledger&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=12438840553900914842&quot; alt=&quot;5&quot;&gt;&lt;/p&gt;
&lt;p&gt;The most important failure was not in physics or biology. It was in our own record.&lt;/p&gt;
&lt;p&gt;An early EQA dashboard shipped a &quot;51-run calibration registry&quot; that read as authoritative until an external reviewer showed it was procedurally generated.&lt;/p&gt;
&lt;p&gt;It contained fabricated primes, fabricated field degrees, synthetic hash labels, and at least one failed check beside a PASS verdict. It was hallucinated scaffolding, not computation.&lt;/p&gt;
&lt;p&gt;We deleted the synthetic registry, replaced it with real TOE-TEST foundational runs, sanitized local workspace paths, and added a deterministic &lt;code&gt;synthetic_marker&lt;/code&gt; detector so a &lt;code&gt;[synthetic]&lt;/code&gt; tag cannot re-enter the public ledger.&lt;/p&gt;
&lt;p&gt;This is the failure we are most willing to show because it is what the system was built to catch — including when the fabricator was us.&lt;/p&gt;
&lt;h4 id=&quot;failure-1-one-loop-weyl-curvature-blindness&quot;&gt;Failure 1: One-Loop Weyl Curvature Blindness&lt;/h4&gt;
&lt;p&gt;The EQA engine evaluates spacetime geometries under one-loop worldsheet beta-functions of the non-linear sigma-model.&lt;/p&gt;
&lt;p&gt;We stress-tested it with a &quot;Planck-scale spacetime foam Schwarzschild metric with mass M = 0.1,&quot; expecting rapid failure due to extreme curvature near the horizon.&lt;/p&gt;
&lt;p&gt;Instead, the solver returned PASS:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Omega = 0.9985
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The reason is precise. Schwarzschild is Ricci-flat outside the singularity:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;R_mn = 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Our one-loop beta-function gate couples directly to Ricci curvature, not Weyl curvature. So the metric residuals vanished even though tidal curvature was physically severe.&lt;/p&gt;
&lt;p&gt;The Kretschmann scalar made the blind spot visible:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;K = R_abcd * R^abcd = 48 * M^2 / r^6 = 4800
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is not a broken engine. It is a specific boundary. The solver is correct where one-loop Ricci geometry is sufficient. T09 marks where that sufficiency ends.&lt;/p&gt;
&lt;p&gt;We have not fixed this. The correction requires higher-order alpha-prime terms for Ricci-flat backgrounds with high tidal forces.&lt;/p&gt;
&lt;h4 id=&quot;failure-2-an-honest-rejection-we-cannot-yet-confirm&quot;&gt;Failure 2: An Honest Rejection We Cannot Yet Confirm&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4565359330200463871&quot; alt=&quot;6&quot;&gt;&lt;/p&gt;
&lt;p&gt;In EXP-005, our internal candidate-generation engine screened three lipid carriers for topical Upadacitinib: SLN, NLC, and liposomal gel.&lt;/p&gt;
&lt;p&gt;Each was scored by SR9, an advisory cross-domain consistency heuristic. Our bar was &lt;code&gt;&amp;gt;= 0.80&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The scores were far below that bar:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;SLN ~= 0.28
NLC ~= 0.23
liposomal gel ~= 0.26
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every candidate was rejected in under two hours, against an estimated months of bench work.&lt;/p&gt;
&lt;p&gt;But because SR9 is advisory, we do not know whether these values reflect real formulation incompatibility or an over-conservative false reject. A fast negative is useful only if it is correct.&lt;/p&gt;
&lt;h4 id=&quot;failure-2b-when-the-models-themselves-disagree&quot;&gt;Failure 2b: When the Models Themselves Disagree&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=12823905526682961878&quot; alt=&quot;7&quot;&gt;&lt;/p&gt;
&lt;p&gt;EXP-031 tested a 52-amino-acid target across AlphaFold2, AlphaFold3, Chai-1, and Boltz-2.&lt;/p&gt;
&lt;p&gt;They did not converge. pTM stayed low:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;AF2 pTM ~= 0.31
AF3 pTM ~= 0.40
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The inter-model consensus drifted by &lt;code&gt;0.09&lt;/code&gt; to &lt;code&gt;0.37&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The honest outcome was not a number. It was a refusal: the pipeline returned Unverified / Drift Detected and an observer-only decision for every arm.&lt;/p&gt;
&lt;p&gt;The ledger's job was to refuse to launder that disagreement into a result.&lt;/p&gt;
&lt;h4 id=&quot;failure-3-the-multiplicative-reliability-fallacy&quot;&gt;Failure 3: The Multiplicative Reliability Fallacy&lt;/h4&gt;
&lt;p&gt;The BAV pipeline originally modeled end-to-end reliability as a multiplicative chain:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;p_e2e = p_capture * p_transfer * p_model * p_clinical
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These factors are not independent. Clinical reliability depends on model reliability, which depends on transfer and capture quality.&lt;/p&gt;
&lt;p&gt;The correct direction is conditional:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;p_e2e =
  p(clinical | model)
  * p(model | transfer)
  * p(transfer | capture)
  * p(capture)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We have not implemented this yet. Every reliability figure in the BAV lane carries this constraint.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-experiments-to-public-custody-paths&quot;&gt;From Experiments to Public Custody Paths&lt;/h3&gt;
&lt;p&gt;Before this infrastructure existed, experiments ended as local folders, private notes, or claims that required too much explanation. Now a weekly experiment can become a public record: a bounded run, score, report, artifact path, and failure note.&lt;/p&gt;
&lt;p&gt;We do not see this as a replacement for peer review. We see it as the layer before peer review: the place where claims become inspectable, failures remain visible, and weekly experiments accumulate.&lt;/p&gt;
&lt;p&gt;We also avoid claiming false determinism. Fold outputs vary with seed, GPU architecture, MSA depth, and compiler version. In EXP-031, we anchor the input FASTA, pin the seed and model versions, and record confidence metrics as a labelled reference run. The goal is regime-level comparison, not bit-exact reproduction.&lt;/p&gt;
&lt;p&gt;The detailed repository tree is omitted here for space; the public ledger exposes the custody paths directly.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;mica-and-the-ci-sanitizer-gate&quot;&gt;MICA and the CI Sanitizer Gate&lt;/h3&gt;
&lt;p&gt;Two layers keep the ledger honest before publication.&lt;/p&gt;
&lt;p&gt;MICA, Memory Invocation &amp;amp; Context Archive for AI, is the governance memory. It encodes project invariants: internal metrics carry no external authority, fabricated data is prohibited, and public claims stay understated.&lt;/p&gt;
&lt;p&gt;The sanitizer is the enforcement layer. It runs as a CI gate and fails the build when it finds workspace leaks, local-specific PII patterns, promotional language, or fabrication tags.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;synthetic_marker&lt;/code&gt; detector was added after Failure 0. The &lt;code&gt;promotional_language&lt;/code&gt; detector flags public-facing hype such as &quot;revolutionary,&quot; &quot;state-of-the-art,&quot; or &quot;authoritative.&quot;&lt;/p&gt;
&lt;p&gt;The result is a repository that censors its own hype, leaks, and fabrications before publication — and keeps an auditable record of doing so.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;dashboard-heuristics-labelled-as-heuristics&quot;&gt;Dashboard Heuristics: Labelled As Heuristics&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=13207336213495235331&quot; alt=&quot;8&quot;&gt;&lt;/p&gt;
&lt;p&gt;The dashboard plots EQA metrics against an exponential curve.&lt;/p&gt;
&lt;p&gt;Status: &lt;code&gt;ADVISORY-HEURISTIC&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This curve is not a physical law. It is an empirical visual fitting heuristic for charting. Treating it as fundamental law would violate the ledger's credibility rules.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Omega(norm_R_F) = Omega_0 * exp(-lambda * norm_R_F) + epsilon_numerical
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-we-need-others-to-test&quot;&gt;What We Need Others to Test&lt;/h3&gt;
&lt;p&gt;The ledger is not finished. It is a public audit brief.&lt;/p&gt;
&lt;p&gt;We need formulation scientists to test whether EXP-005 reflects real carrier incompatibility or an over-conservative false reject.&lt;/p&gt;
&lt;p&gt;We need structural biologists to test whether EXP-031 reflects genuine out-of-distribution behavior or a harness artifact.&lt;/p&gt;
&lt;p&gt;We need string theorists to test whether TOE-TEST-0001 is physically correct in the Ricci-flat regimes where we claim results.&lt;/p&gt;
&lt;p&gt;We need compliance experts to test whether the zero-execution Article 12 mapping in BSC is legally defensible or technically approximate.&lt;/p&gt;
&lt;p&gt;All code, schemas, and run payloads: Zenodo DOI &lt;code&gt;10.5281/zenodo.20483364&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Public Ledger: &lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven01.github.io/Flamehaven-Verification-Ledger/&quot;&gt;https://flamehaven01.github.io/Flamehaven-Verification-Ledger/&lt;/a&gt;&lt;br&gt;
Citation ORCID: &lt;code&gt;0009-0009-2641-4280&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;epilogue-the-invitation&quot;&gt;Epilogue: The Invitation&lt;/h3&gt;
&lt;p&gt;We began by trying to reach the unreachable: spacetime geometries, novel small-molecule bindings, a Theory of Everything.&lt;/p&gt;
&lt;p&gt;We did not get there. This ledger is not that.&lt;/p&gt;
&lt;p&gt;What we found instead was smaller and more useful: a way to make a claim show the path by which it came to exist.&lt;/p&gt;
&lt;p&gt;As AI fills every field with fluent, confident, publication-shaped output, the quiet casualty is the experiment itself: the runnable artifact, the failed run nobody deleted, the number traced back to code.&lt;/p&gt;
&lt;p&gt;We are not announcing a solution. We are publishing a small, inspectable surface — failures included — and handing it to the people best equipped to break it.&lt;/p&gt;
&lt;p&gt;If it proves useful against the confident noise filling everyone's feeds, that will be your verdict, not our claim.&lt;/p&gt;
&lt;p&gt;We built this to learn from you.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/19525/we-built-ai-verification-infrastructure-then-it-found-our-blind-spots</guid>
<pubDate>Tue, 02 Jun 2026 17:44:46 +0000</pubDate>
</item>
<item>
<title>Stanford. Princeton. A bioRxiv Paper. So Why Did Nobody Ask Where the Data Goes?</title>
<link>https://coderlegion.com/19068/stanford-princeton-a-biorxiv-paper-so-why-did-nobody-ask-where-the-data-goes</link>
<description>&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4234498897804287785&quot; alt=&quot;cover&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When a repository carries this kind of pedigree, people stop asking questions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Runchuan-BU/BioClaw&lt;/strong&gt; (1) — a biomedical AI assistant published on bioRxiv on April 14, 2026 by a multi-institution research group (2). The STELLA foundation carries Stanford and Princeton correspondence addresses. 374 stars. 31 biomedical tools. 95+ skills. Deployable across eight messaging platforms.&lt;/p&gt;
&lt;p&gt;One orientation note before we go further:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Runchuan-BU/BioClaw&quot;&gt;BioClaw&lt;/a&gt;&lt;/strong&gt; is the biomedical repository under review. It is built on a &lt;strong&gt;NanoClaw container-based agent architecture&lt;/strong&gt; and distributed through &lt;strong&gt;OpenClaw&lt;/strong&gt; as its primary install and runtime path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/flamehaven01/STEM-BIO-AI&quot;&gt;STEM-BIO-AI&lt;/a&gt;&lt;/strong&gt; is our external audit scanner — a deterministic local CLI tool that evaluates repository evidence surfaces without executing the code or making network requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Three separate layers. Three separate risk profiles.&lt;/p&gt;
&lt;p&gt;This is exactly the kind of tool a research institution can adopt after checking the science, the README, and the repository — while still missing the deployment risk that matters. The credentials do the convincing. The bioRxiv paper frames the science. The repository shows the capability. But nobody reads the architecture closely enough to ask the one question that matters.&lt;/p&gt;
&lt;p&gt;We asked that question.&lt;/p&gt;
&lt;p&gt;The answer — and the thesis of everything that follows — is this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The exposure happens at the channel, not at the compute.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The model can be sophisticated. The containers can be clean. The bioinformatics toolkit can be comprehensive. None of that changes what happens to the data before it reaches any of those components.&lt;/p&gt;
&lt;p&gt;For BioClaw, the highest-risk showcased intake path is WhatsApp.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-line-that-stopped-us&quot;&gt;The Line That Stopped Us&lt;/h3&gt;
&lt;p&gt;From the bioRxiv paper, describing BioClaw's supported data modalities (2):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&quot;The application of BioClaw spans various biomedical domains (e.g., genomics, clinics, structural biology) and data modalities (e.g., sequencing data, EHR data, protein structure data).&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;EHR. Electronic Health Records.&lt;/p&gt;
&lt;p&gt;The paper explicitly names EHR data as a supported modality. BioClaw's README foregrounds WhatsApp as its primary showcase channel (1). Other messaging platforms are also supported.&lt;/p&gt;
&lt;p&gt;The critique here is not &quot;BioClaw equals WhatsApp.&quot;&lt;/p&gt;
&lt;p&gt;The critique is that &lt;strong&gt;BioClaw's WhatsApp-first workflow is the highest-risk path for sensitive data — and it is the path the repository presents first.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EHR data. Through a consumer chat channel. In group threads.&lt;/p&gt;
&lt;p&gt;This is not a minor documentation issue. It is a compliance collision.&lt;/p&gt;
&lt;p&gt;To understand why, you need to look at the data path — not the abstract, not the paper's framing, but what happens at the moment a researcher hits send.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-data-path-shows&quot;&gt;What the Data Path Shows&lt;/h3&gt;
&lt;p&gt;The README opens with this (1):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&quot;BioClaw brings the power of computational biology directly into WhatsApp group chats.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Researchers message the BioClaw bot in a WhatsApp group. They upload files — sequencing data, gel images, CSV exports, protein structures. The system processes them in Docker containers and delivers results back to the same chat thread.&lt;/p&gt;
&lt;p&gt;That architecture is the product.&lt;/p&gt;
&lt;p&gt;The risk appears when that same workflow is placed beside the paper's claim that EHR data is a supported input modality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Directly confirmed by repository and paper:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EHR data, sequencing files, and protein structure data are named as supported modalities in the bioRxiv abstract (2).&lt;/li&gt;
&lt;li&gt;WhatsApp is the primary showcased channel in the README and Quick Start (1).&lt;/li&gt;
&lt;li&gt;No PII or PHI scrubbing layer is visible in the repository between the consumer channel and the containerized agent runner.&lt;/li&gt;
&lt;li&gt;No audit-log surface for data ingress is detected in the codebase.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Regulatory inference based on HHS guidance:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;HHS guidance states that covered entities handling ePHI through cloud services or third-party platforms require a signed Business Associate Agreement with those services (3). WhatsApp cannot execute a HIPAA BAA under any configuration. For covered-entity deployment involving PHI or EHR data, that creates a compliance gap before any downstream model or container control can help.&lt;/p&gt;
&lt;p&gt;Once an EHR file enters a group chat, it can replicate into unmanaged personal cloud backups, device storage, and participant-controlled environments. The chain of custody is not merely weakened. It is lost to the deploying institution at the moment of upload.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Platform-level risk from the OpenClaw runtime:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BioClaw is distributed and run through OpenClaw. In March 2026, Bloomberg reported Chinese government-level restrictions on OpenClaw use, citing broad data access and external communications capabilities (4). China's CNCERT/CC separately identified prompt injection as a critical threat vector, and security researchers rated one OpenClaw vulnerability at CVSS 8.8 (5).&lt;/p&gt;
&lt;p&gt;NanoClaw's container architecture provides execution isolation. It does not contain what OpenClaw exposes at the runtime boundary.&lt;/p&gt;
&lt;p&gt;That distinction matters because biomedical data is not ordinary data. A genomic sequence cannot be changed after a breach. It identifies not only the person who uploaded it, but biological relatives who never consented to the analysis. EHR data carries diagnoses, treatment histories, and identifiers that become protected health information the moment they move through an unmanaged channel.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;when-ehr-gets-out&quot;&gt;When EHR Gets Out&lt;/h3&gt;
&lt;p&gt;The following cases establish the operational cost of EHR exposure. They are not analogies for BioClaw. They are the documented record of what happens when healthcare data moves through systems that were trusted before they were verified.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Change Healthcare, February 2024.&lt;/strong&gt; Ransomware hit UnitedHealth's claims-processing subsidiary. EHR access froze across pharmacies, hospitals, and clinics nationwide. Final confirmed count: 192.7 million individuals affected — the largest healthcare data breach in U.S. history (6). Estimated cost to UnitedHealth: $2.87 billion. OCR opened a HIPAA compliance investigation. Litigation is ongoing; legal experts expect any settlement to exceed the $115 million Anthem precedent given scale (7).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ascension Health, May 2024.&lt;/strong&gt; One employee downloaded a malicious file. EHR systems went offline across 142 hospitals for nearly four weeks. Staff reverted to paper. Ambulances were diverted. Appointments were cancelled. 5.6 million patient records were ultimately compromised (8).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Esse Health, April 2025.&lt;/strong&gt; Cyberattack on a Missouri physician group. 23,671 patients' EHR data exposed. Settlement reached: $2,525,000. Claims deadline: August 2026 (9).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Three incidents. Different attack vectors. One constant: once EHR data moves through an unmanaged channel or unverified infrastructure, the institution loses control of what happens next.&lt;/p&gt;
&lt;p&gt;BioClaw's WhatsApp channel is an unmanaged channel. EHR data is the modality the paper explicitly lists as supported.&lt;/p&gt;
&lt;p&gt;That is the standard BioClaw has to be evaluated against.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-stem-bio-ai-found&quot;&gt;What STEM-BIO-AI Found&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=10830887289361623347&quot; alt=&quot;report&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Finding &lt;/th&gt;&lt;th&gt;Evidence &lt;/th&gt;&lt;th&gt;Score Impact&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Missing clinical/non-diagnostic boundary &lt;/td&gt;&lt;td&gt;Clinical-adjacent surfaces without explicit non-clinical boundary &lt;/td&gt;&lt;td&gt;Stage 2R: −20&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;No domain-specific tests &lt;/td&gt;&lt;td&gt;Zero bio-domain test surface detected &lt;/td&gt;&lt;td&gt;Stage 3 T2: 0/15&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;No changelog &lt;/td&gt;&lt;td&gt;No CHANGELOG or release-history file &lt;/td&gt;&lt;td&gt;Stage 3 T3: 0/15&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;C5 compliance boundary integrity &lt;/td&gt;&lt;td&gt;Clinical-adjacent content without non-diagnostic disclaimer &lt;/td&gt;&lt;td&gt;WARN&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Final score: 60/100 — Tier 2 Caution.&lt;/strong&gt; Research reference and supervised non-clinical technical review only.&lt;/p&gt;
&lt;p&gt;The domain test score is zero. That means no automated check was visible to prevent the system from hallucinating a genomic sequence or silently returning a corrupted clinical summary back to the group chat.&lt;/p&gt;
&lt;p&gt;No visible repository-level test validates that biological outputs are structurally sound, and no visible repository-level guard demonstrates that known PII patterns are scrubbed before sensitive data enters the workflow.&lt;/p&gt;
&lt;p&gt;The changelog score is also zero. An institution that adopted BioClaw last month would have no documented record of what changed since.&lt;/p&gt;
&lt;p&gt;The Stage 2R penalty of −20 reflects a structural fact: the paper names EHR data as a use case, and no part of the repository or paper adds a &quot;not for clinical deployment&quot; boundary.&lt;/p&gt;
&lt;p&gt;That gap is what makes the tool adoptable in exactly the environments where it should not be deployed without further review.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-score-actually-means&quot;&gt;What the Score Actually Means&lt;/h3&gt;
&lt;p&gt;60/100 is not a failing grade. It is a precise description of where the engineering stops.&lt;/p&gt;
&lt;p&gt;A Tier 2 Caution score does not mean BioClaw is empty, broken, or unserious. That would be the wrong reading.&lt;/p&gt;
&lt;p&gt;The audit found real engineering surface. Workflow files, dependency evidence, and several code-integrity checks were present. The repository is not a toy project, and the research problem it addresses is real.&lt;/p&gt;
&lt;p&gt;But those signals do not answer the deployment question.&lt;/p&gt;
&lt;p&gt;The weak points appear at the exact boundary where patient-adjacent use would require stronger evidence: no explicit non-clinical boundary, no domain-specific test surface, no changelog, no traceability manifest or runtime audit-log schema.&lt;/p&gt;
&lt;p&gt;From the raw report: Stage 1 scored 70, Stage 2R scored 50, Stage 3 scored 54. The Stage 4 Replication score is 35 — reported separately and not factored into the final score, but indicative of a reproducibility posture that makes independent verification difficult.&lt;/p&gt;
&lt;p&gt;That is the difference between a capable research repository and a deployment-ready biomedical system.&lt;/p&gt;
&lt;p&gt;The signals that make BioClaw easy to adopt are precisely the signals that should trigger an independent audit — not replace one.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;three-cases-same-assumption-&quot;&gt;Three Cases. Same Assumption.&lt;/h3&gt;
&lt;p&gt;The prior section described what false assurance looks like with BioClaw specifically. This section shows how that same assumption plays out elsewhere — not the cost of EHR exposure, but the mechanism by which organizations arrive at the breach without ever running an independent check.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tempus AI — Genetic Data, Commercial Pipeline, Alleged No Consent (2026)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tempus AI acquired Ambry Genetics for $600 million in February 2025, transferring Ambry's genetic testing database. According to the consolidated class action &lt;em&gt;Farrier et al v. Tempus AI, Inc.&lt;/em&gt;, Tempus is alleged to have trained AI models on that data and disclosed it to more than 70 third-party clients in deals totaling $1.1 billion, without the knowledge or consent of data subjects (10)(11). These are allegations; no judgment has been entered.&lt;/p&gt;
&lt;p&gt;The operative assumption: the acquisition process covered the data governance question. The consent scope of the original collection was never re-examined against the new use case.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enzo Biochem — Infrastructure Trusted Because It Was Familiar (2023)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ransomware hit Enzo Biochem's clinical test systems in April 2023. 2.47 million individuals affected. Investigators found shared credentials unchanged for years, no multi-factor authentication, and ineffective monitoring controls (12). Enzo paid $7.5 million to settle the class action and $4.5 million to three state governments.&lt;/p&gt;
&lt;p&gt;The operative assumption: the infrastructure was safe because it had always been used that way.&lt;/p&gt;
&lt;p&gt;The researcher who routes genomic files through WhatsApp because that is how the group already communicates is making the same assumption today.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wisconsin Physicians Service — Tool Trusted Because It Was Widely Used (2023)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A breach at Wisconsin Physicians Service in May 2023 went undetected for over a year. 3.1 million individuals affected — names, Social Security numbers, Medicare identifiers, treatment dates (13). The third-party file transfer tool involved was widely trusted across the industry.&lt;/p&gt;
&lt;p&gt;The operative assumption: widespread adoption equals verified safety.&lt;/p&gt;
&lt;p&gt;Three organizations. Three different failure modes. One shared assumption: someone else already verified this.&lt;/p&gt;
&lt;p&gt;No one had.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stars-are-not-audits&quot;&gt;Stars Are Not Audits&lt;/h3&gt;
&lt;p&gt;BioClaw's version of false assurance is more sophisticated than most. It wears the clothing of academic legitimacy.&lt;/p&gt;
&lt;p&gt;374 stars. A bioRxiv paper. Authors from Michigan, SJTU, CAMS, PUMC, UIUC, Westlake, HKUST. STELLA foundation with Stanford and Princeton correspondence authors.&lt;/p&gt;
&lt;p&gt;None of that is a security audit. None of it constitutes a HIPAA risk analysis. bioRxiv is a preprint server — the paper has not been peer reviewed for security or compliance claims. The 374 stars reflect interest, not inspection.&lt;/p&gt;
&lt;p&gt;Academic pedigree is the most effective form of false assurance in bio AI precisely because it signals rigor by proxy. It does not signal that anyone examined what happens when a researcher uploads an EHR export to a WhatsApp group to ask the bot a question.&lt;/p&gt;
&lt;p&gt;The legal exposure does not fall on the repository maintainers. Open-source carries no HIPAA obligation. The liability belongs to the covered entity or business associate that deploys the tool against PHI or research genomic data and relies on star counts and institutional affiliations as the basis for that decision.&lt;/p&gt;
&lt;p&gt;Under the HHS inflation-adjusted penalty schedule published in the Federal Register on January 28, 2026 — 2025 OMB inflation multiplier 1.02598 — exposure for covered-entity deployment involving PHI runs up to $73,011 per violation for willful neglect corrected within 30 days, and up to $2,190,294 per violation for willful neglect not corrected (14).&lt;/p&gt;
&lt;p&gt;Stars are not audits. Pedigree is not a risk analysis. And after the breach, &quot;we did not know&quot; is no longer a serious governance position.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;three-checks-before-you-deploy&quot;&gt;Three Checks Before You Deploy&lt;/h3&gt;
&lt;p&gt;1️⃣ &lt;strong&gt;Read the paper, not only the README.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BioClaw's README describes BLAST searches and protein structures. It does not mention EHR data. The bioRxiv paper names EHR data in the scope description, on page one. The clinical data modality that changes the legal posture is not in the README.&lt;/p&gt;
&lt;p&gt;2️⃣ &lt;strong&gt;Audit the channel before the model.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Containerized execution, isolated Docker environments, and bioinformatics tooling are downstream of the data ingress point. When a researcher uploads a genomic sequence to a WhatsApp group, that file enters Meta's infrastructure before any BioClaw engineering control takes effect. It can also enter the device backups of every participant.&lt;/p&gt;
&lt;p&gt;The model is not the exposure. The channel is.&lt;/p&gt;
&lt;p&gt;3️⃣ &lt;strong&gt;Audit the stack, not just the repository.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BioClaw is the biomedical application. NanoClaw is the container agent architecture. OpenClaw is the install and runtime path — and the layer with documented government-level security restrictions and a CVSS 8.8 vulnerability (4)(5).&lt;/p&gt;
&lt;p&gt;When a breach happens, the liability does not care which layer failed. It cares who deployed the stack without checking.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-thought&quot;&gt;Final Thought&lt;/h3&gt;
&lt;p&gt;The researchers building BioClaw are solving a real problem. Bioinformatics workflows are fragmented. The friction of switching between command-line tools, visualization software, databases, and literature engines is real. Making that accessible through natural language in a shared group chat is a genuine architectural idea.&lt;/p&gt;
&lt;p&gt;That is not the problem.&lt;/p&gt;
&lt;p&gt;The problem is that a system capable of processing EHR data — data that is permanent, identifying, and biologically inherited — was presented with a consumer messaging platform as its primary showcased intake channel, with no visible audit trail, no visible PHI scrubbing layer, and no clinical-use boundary.&lt;/p&gt;
&lt;p&gt;None of those gaps appear in the abstract, the README, the star count, or the institutional affiliations.&lt;/p&gt;
&lt;p&gt;Behind every query is a potential patient. The sequencing file a researcher uploads to ask a question is not abstract data. It is someone's genomic identity.&lt;/p&gt;
&lt;p&gt;The tool was built to accelerate research. Acceleration without containment is not a feature.&lt;/p&gt;
&lt;p&gt;In bio AI, it is the failure mode.&lt;/p&gt;
&lt;p&gt;Stars are not audits. They never were.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Every claim in this newsletter is backed by machine-generated audit data. The raw output for this evaluation — scanner findings, explain trace, experiment results, and full report artifacts — is publicly available for independent verification.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flamehaven Verification Ledger:&lt;/strong&gt;  &lt;/p&gt;
&lt;h3 id=&quot;https-flamehaven01-github-io-flamehaven-verification-ledger-stem-bio-ai-bioclaw-2026-5-21-runchuan-bu-bioclaw-report-html&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven01.github.io/Flamehaven-Verification-Ledger/stem-bio-ai/bioclaw/2026-5-21/Runchuan-BU_BioClaw_report.html&quot;&gt;https://flamehaven01.github.io/Flamehaven-Verification-Ledger/stem-bio-ai/bioclaw/2026-5-21/Runchuan-BU_BioClaw_report.html&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id=&quot;next-week&quot;&gt;Next Week&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Awesome-Bioinformatics&lt;/strong&gt; — danielecook/Awesome-Bioinformatics. 73,000+ stars. The most-starred bioinformatics resource list on GitHub. AI agents are already citing it as a trusted source — recommending tools from the list for clinical genomic workflows without a compliance layer in sight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One audit question:&lt;/strong&gt; When an AI agent recommends a tool from Awesome-Bioinformatics for genomic analysis, who is responsible for verifying that the recommendation is safe for clinical use?&lt;/p&gt;
&lt;p&gt;The list doesn't say. The agent doesn't ask. The institution assumes someone already checked.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;references-2&quot;&gt;References&lt;/h3&gt;
&lt;p&gt;(1) &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Runchuan-BU/BioClaw&quot;&gt;Runchuan-BU/BioClaw&lt;/a&gt; — GitHub. Accessed May 2026.&lt;br&gt;
(2) &lt;a rel=&quot;nofollow&quot; href=&quot;https://biorxiv.org/content/10.64898/2026.04.11.716807v1&quot;&gt;BioClaw: Human-Bot Research Collaboration Ecosystems in Group Chats&lt;/a&gt; — bioRxiv. Posted April 14, 2026. doi: 10.64898/2026.04.11.716807.&lt;br&gt;
(3) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.hhs.gov/hipaa/for-professionals/special-topics/health-information-technology/cloud-computing/index.html&quot;&gt;Guidance on HIPAA &amp;amp; Cloud Computing&lt;/a&gt; — HHS.gov.&lt;br&gt;
(4) &lt;a rel=&quot;nofollow&quot; href=&quot;https://bloomberg.com/news/articles/2026-03-11/china-moves-to-limit-use-of-openclaw-ai-at-banks-government-agencies&quot;&gt;China Moves to Limit Use of OpenClaw AI at Banks, Government Agencies&lt;/a&gt; — Bloomberg, March 11, 2026.&lt;br&gt;
(5) &lt;a rel=&quot;nofollow&quot; href=&quot;https://winbuzzer.com/2026/03/12/china-restricts-openclaw-ai-banks-state-agencies-security-flaws-xcxwbn/&quot;&gt;China Restricts OpenClaw AI at Banks Over Security Flaws&lt;/a&gt; — Winbuzzer, March 12, 2026.&lt;br&gt;
(6) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.hipaaguide.net/change-healthcare-data-breach/&quot;&gt;Change Healthcare Data Breach: 192.7 Million Affected&lt;/a&gt; — The HIPAA Guide, August 7, 2025.&lt;br&gt;
(7) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.security.org/identity-theft/breach/change-healthcare/&quot;&gt;Change Healthcare Data Breach: What Happened and What to Do&lt;/a&gt; — Security.org, March 2026.&lt;br&gt;
(8) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.paubox.com/blog/what-we-can-learn-from-2024s-top-healthcare-cyberattacks&quot;&gt;What We Can Learn from 2024's Top Healthcare Cyberattacks&lt;/a&gt; — Paubox.&lt;br&gt;
(9) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.hipaajournal.com/esse-health-data-breach-settlement/&quot;&gt;Esse Health Agrees to Pay $2.53M to Settle Data Breach Lawsuit&lt;/a&gt; — HIPAA Journal, May 2026.&lt;br&gt;
(10) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.hipaajournal.com/tempus-ai-class-action-alawsuit-genetic-data-disclosures/&quot;&gt;Healthcare AI Firm Sued Over Alleged Unlawful Disclosures of Genetic Data&lt;/a&gt; — HIPAA Journal, April 2026.&lt;br&gt;
(11) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.genomeweb.com/informatics/tempus-ai-sued-breach-genetic-information-privacy-act&quot;&gt;Tempus AI Sued For Breach of Genetic Information Privacy Act&lt;/a&gt; — GenomeWeb, February 2026.&lt;br&gt;
(12) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.reuters.com/business/healthcare-pharmaceuticals/enzo-biochem-pay-45-mln-three-states-failing-safeguard-patient-data-2024-08-08/&quot;&gt;Enzo Biochem to pay $4.5 mln for failing to safeguard patient data&lt;/a&gt; — Reuters, August 2024.&lt;br&gt;
(13) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.cms.gov/blog/cms-notifies-individuals-potentially-impacted-data-breach&quot;&gt;CMS Notifies Individuals Potentially Impacted by Data Breach&lt;/a&gt; — CMS.gov, 2024.&lt;br&gt;
(14) &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.govinfo.gov/content/pkg/FR-2026-01-28/pdf/2026-01688.pdf&quot;&gt;HHS Inflation-Adjusted Civil Monetary Penalty Schedule&lt;/a&gt; — Federal Register, January 28, 2026.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/19068/stanford-princeton-a-biorxiv-paper-so-why-did-nobody-ask-where-the-data-goes</guid>
<pubDate>Wed, 27 May 2026 14:15:21 +0000</pubDate>
</item>
<item>
<title>Beyond Repo Scanning: How AIRI Expanded the Risk Vocabulary in STEM BIO-AI 1.7.x</title>
<link>https://coderlegion.com/17950/beyond-repo-scanning-how-airi-expanded-the-risk-vocabulary-in-stem-bio-ai-1-7-x</link>
<description>&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kyj7biyn850iewno8ywf.png&quot; alt=&quot;Beyond Repo Scanning&quot;&gt;&lt;/p&gt;
&lt;p&gt;This is the second half of the same &lt;code&gt;1.7.x&lt;/code&gt; transition.&lt;/p&gt;
&lt;p&gt;In the previous post, I wrote about calibration governance: how STEM BIO-AI keeps score authority from drifting when users simulate policy posture.&lt;/p&gt;
&lt;p&gt;That was about how the system decides.&lt;/p&gt;
&lt;p&gt;This post is about a different layer:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;how the system speaks about risk.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A local repository scanner can become trapped inside its own vocabulary.&lt;/p&gt;
&lt;p&gt;It can detect dependency issues, weak provenance language, shallow validation, reproducibility gaps, and risky exception handling.&lt;/p&gt;
&lt;p&gt;But if every finding stays only inside the scanner's internal language, the report may remain too narrow.&lt;/p&gt;
&lt;p&gt;That is the problem AIRI helped address in STEM BIO-AI &lt;code&gt;1.7.x&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In this context, AIRI is used as a local risk-vocabulary layer built from the MIT AI Risk Repository ecosystem.&lt;/p&gt;
&lt;p&gt;The point is not to replace deterministic repository scanning with an external risk database.&lt;/p&gt;
&lt;p&gt;The point is to give local findings a broader risk vocabulary without turning that vocabulary into a truth claim.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;basic-airi-context&quot;&gt;Basic AIRI Context&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/17fvupudpdertnq7dy6i.png&quot; alt=&quot;Expanding the language of risk&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://airisk.mit.edu/&quot;&gt;The MIT AI Risk Repository&lt;/a&gt; is a public AI risk resource from the MIT AI Risk Initiative.&lt;/p&gt;
&lt;p&gt;It helps organize fragmented AI risk language across research, policy, and industry sources.&lt;/p&gt;
&lt;p&gt;The repository includes three main parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an AI Risk Database&lt;/li&gt;
&lt;li&gt;a Causal Taxonomy of AI Risks&lt;/li&gt;
&lt;li&gt;a Domain Taxonomy of AI Risks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;According to the MIT AI Risk Repository site, the database collects 1,700+ risks from 74 existing AI risk frameworks and classifications. The public domain taxonomy organizes risks into 7 domains and 24 subdomains.&lt;/p&gt;
&lt;p&gt;Some of those domain taxonomy nodes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;2. Privacy &amp;amp; Security&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2.1 Compromise of privacy by obtaining, leaking or correctly inferring sensitive information&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2.2 AI system security vulnerabilities and attacks&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;6.5 Governance failure&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7. AI System Safety, Failures, &amp;amp; Limitations&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7.3 Lack of capability or robustness&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7.4 Lack of transparency or interpretability&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes AIRI useful as a vocabulary source.&lt;/p&gt;
&lt;p&gt;But vocabulary is not truth.&lt;/p&gt;
&lt;p&gt;A local scanner should not say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this repository caused this risk.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It should say something more careful:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this local finding belongs to a broader class of AI risk language.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That distinction is the design boundary.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-problem-airi-was-meant-to-solve&quot;&gt;What Problem AIRI Was Meant to Solve&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7zurro5671x5iqraftvh.png&quot; alt=&quot;Local scanners are trapped in their own vocabulary&quot;&gt;&lt;/p&gt;
&lt;p&gt;STEM BIO-AI began as a deterministic evidence-surface scanner for bio and medical AI repositories.&lt;/p&gt;
&lt;p&gt;That core remains.&lt;/p&gt;
&lt;p&gt;The scanner looks at observable repository surfaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;README and docs&lt;/li&gt;
&lt;li&gt;code structure&lt;/li&gt;
&lt;li&gt;CI configuration&lt;/li&gt;
&lt;li&gt;dependency manifests&lt;/li&gt;
&lt;li&gt;changelogs&lt;/li&gt;
&lt;li&gt;reproducibility signals&lt;/li&gt;
&lt;li&gt;clinical-adjacent boundary language&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But once STEM BIO-AI started producing richer audit outputs, a new question appeared:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;How should the system talk about the broader risk territory around a detected finding?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a fail-open exception path may have implications beyond code quality&lt;/li&gt;
&lt;li&gt;weak provenance language may connect to reproducibility and trust concerns&lt;/li&gt;
&lt;li&gt;shallow validation around sensitive inputs may point toward a wider harm surface than the repository alone makes obvious&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without a broader vocabulary, those findings remain local and narrow.&lt;/p&gt;
&lt;p&gt;AIRI helps widen the vocabulary without making the scanner less deterministic.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-short-note-on-detector-families&quot;&gt;A Short Note on Detector Families&lt;/h3&gt;
&lt;p&gt;In this article, a detector family means a bounded local analysis surface inside STEM BIO-AI.&lt;/p&gt;
&lt;p&gt;It does not mean an AI model judging the repository.&lt;/p&gt;
&lt;p&gt;Examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;code integrity detectors such as hardcoded credential or fail-open exception checks&lt;/li&gt;
&lt;li&gt;AST contract detectors such as shallow validator checks&lt;/li&gt;
&lt;li&gt;bio diagnostics such as SMILES parser-guard or silent mock fallback checks&lt;/li&gt;
&lt;li&gt;provenance and reproducibility evidence surfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A detector family produces a local finding.&lt;/p&gt;
&lt;p&gt;The AIRI layer does not replace that finding.&lt;/p&gt;
&lt;p&gt;It gives the finding a broader vocabulary anchor.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;airi-does-not-replace-the-scan&quot;&gt;AIRI Does Not Replace the Scan&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd7zc9lpl0946movl0id.png&quot; alt=&quot;Vocabulary is not truth&quot;&gt;&lt;/p&gt;
&lt;p&gt;This boundary matters.&lt;/p&gt;
&lt;p&gt;The AIRI layer does not:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;validate that a real-world incident happened&lt;/li&gt;
&lt;li&gt;prove that a repository causes a given harm&lt;/li&gt;
&lt;li&gt;turn a detector hit into a clinical danger claim&lt;/li&gt;
&lt;li&gt;replace due diligence or domain review&lt;/li&gt;
&lt;li&gt;override the deterministic score&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instead, it gives the system a structured way to say:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what broader risk territory a finding may relate to&lt;/li&gt;
&lt;li&gt;which risk vocabulary exists around that class of concern&lt;/li&gt;
&lt;li&gt;where known coverage gaps remain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why AIRI is a risk-vocabulary layer, not a truth layer.&lt;/p&gt;
&lt;p&gt;If a report says something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;covered risks: 12 / 31
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;that should not be read as:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;the repository is 38% safe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;the scanner covers 38% of all AI risk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A better interpretation is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;within the detector scope currently mapped into the curated AIRI runtime layer, this scan triggered findings that connect to these AIRI risk entries.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is narrower.&lt;/p&gt;
&lt;p&gt;It is also more useful.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-external-repository-to-local-governance-layer&quot;&gt;From External Repository to Local Governance Layer&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5fwgfgtfux2bro49eyfl.png&quot; alt=&quot;Three layers of local governance&quot;&gt;&lt;/p&gt;
&lt;p&gt;The AIRI story in STEM BIO-AI changed during &lt;code&gt;1.7.x&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The initial direction was simple: use AIRI to provide broader risk labels around local findings.&lt;/p&gt;
&lt;p&gt;That was useful, but not enough.&lt;/p&gt;
&lt;p&gt;If an audit system relies on an external risk source, it needs governance around that source.&lt;/p&gt;
&lt;p&gt;So STEM BIO-AI separates AIRI into three local layers:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Local layer                     &lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;airi_registry_full.v1.json&lt;/code&gt;    &lt;/td&gt;&lt;td&gt;normalized full local registry derived from the upstream AIRI snapshot&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;airi_runtime_bundle.v1.json&lt;/code&gt;   &lt;/td&gt;&lt;td&gt;curated runtime subset used by deterministic scans&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;airi_detector_mapping.v1.json&lt;/code&gt; &lt;/td&gt;&lt;td&gt;detector-to-risk mapping registry plus known-gap records&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This separation prevents a common mistake:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;confusing the full upstream AIRI universe with the smaller curated runtime bundle used by the scanner.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The scanner uses the curated runtime bundle, not the entire upstream AIRI universe.&lt;/p&gt;
&lt;p&gt;That keeps runtime outputs deterministic, reviewable, and tied to a known local snapshot.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-governed-means-here&quot;&gt;What “Governed” Means Here&lt;/h3&gt;
&lt;p&gt;In the current &lt;code&gt;1.7.5&lt;/code&gt; state of the &lt;code&gt;1.7.x&lt;/code&gt; line, governed does not mean that every mapping has gone through an external review board.&lt;/p&gt;
&lt;p&gt;It means something narrower and more concrete:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AIRI data is stored as versioned local artifacts&lt;/li&gt;
&lt;li&gt;runtime scan output uses a curated bundle, not the entire upstream universe&lt;/li&gt;
&lt;li&gt;detector mappings are separated from the full registry&lt;/li&gt;
&lt;li&gt;known gaps are recorded as part of the mapping layer&lt;/li&gt;
&lt;li&gt;artifact metadata surfaces AIRI registry, bundle, mapping, snapshot, and license information&lt;/li&gt;
&lt;li&gt;changes to registry, runtime bundle, or mapping versions require explicit version bumps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the current governance level.&lt;/p&gt;
&lt;p&gt;It is not final.&lt;/p&gt;
&lt;p&gt;But it is stronger than attaching a risk dataset as an unversioned appendix.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-curation-logic&quot;&gt;The Curation Logic&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o8rcpyd6489hb61zceot.png&quot; alt=&quot;Curated by exclusion&quot;&gt;&lt;/p&gt;
&lt;p&gt;This is the part that matters most.&lt;/p&gt;
&lt;p&gt;AIRI is broad. STEM BIO-AI is narrow.&lt;/p&gt;
&lt;p&gt;STEM BIO-AI does not need every AIRI entry active at runtime. It needs the subset that can be responsibly connected to deterministic repository evidence.&lt;/p&gt;
&lt;p&gt;So the runtime bundle is curated by exclusion as much as inclusion.&lt;/p&gt;
&lt;p&gt;A risk vocabulary node should stay outside the runtime bundle when:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No local evidence surface exists&lt;/strong&gt;&lt;br&gt;
The scanner has no repository-level signal that can responsibly connect to that risk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The mapping would require causal inference&lt;/strong&gt;&lt;br&gt;
The scanner would have to imply that harm occurred, that users were affected, or that the repository caused a risk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The risk is too broad for repository-local evidence&lt;/strong&gt;&lt;br&gt;
Broad societal, geopolitical, or macroeconomic risks may be important in AIRI, but they should not become runtime scan outputs unless a local detector surface can support the mapping.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The mapping would confuse vocabulary with score authority&lt;/strong&gt;&lt;br&gt;
If a risk label might be read as changing the formal score or certifying danger, it should remain outside the runtime layer until the reporting semantics are clear.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So the runtime bundle is not a summary of all AI risk.&lt;/p&gt;
&lt;p&gt;It is the subset of risk vocabulary that the scanner can use responsibly.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;example-detector-hit-to-airi-domain-vocabulary&quot;&gt;Example: Detector Hit to AIRI Domain Vocabulary&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvz0q2fw4vfp5okznynr.png&quot; alt=&quot;Connecting evidence to context&quot;&gt;&lt;/p&gt;
&lt;p&gt;A concrete example helps.&lt;/p&gt;
&lt;p&gt;Suppose STEM BIO-AI detects a shallow validator around sensitive or clinical-adjacent inputs.&lt;/p&gt;
&lt;p&gt;The local finding might be:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;CC3_shallow_validator:
validate_* or check_* function uses only length checks without structural validation.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At the repository level, this is a code-contract finding.&lt;/p&gt;
&lt;p&gt;It says:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the function appears to validate input&lt;/li&gt;
&lt;li&gt;the validation is shallow&lt;/li&gt;
&lt;li&gt;the implementation may not enforce the boundary implied by its name&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The AIRI layer should not turn that into:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this repository caused privacy harm.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That would be too strong.&lt;/p&gt;
&lt;p&gt;A safer mapping uses AIRI as vocabulary:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Local detector surface      &lt;/th&gt;&lt;th&gt;Local meaning                                                 &lt;/th&gt;&lt;th&gt;AIRI vocabulary anchor&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;CC3_shallow_validator&lt;/code&gt;     &lt;/td&gt;&lt;td&gt;validation function appears shallower than its name implies   &lt;/td&gt;&lt;td&gt;&lt;code&gt;7.3 Lack of capability or robustness&lt;/code&gt;; possibly &lt;code&gt;2.1 Compromise of privacy...&lt;/code&gt; if sensitive information handling is in scope&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;fail-open exception path    &lt;/td&gt;&lt;td&gt;code path may silently continue after failure                 &lt;/td&gt;&lt;td&gt;&lt;code&gt;7.3 Lack of capability or robustness&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hardcoded credential signal &lt;/td&gt;&lt;td&gt;repository surface suggests exposed secret-like pattern       &lt;/td&gt;&lt;td&gt;&lt;code&gt;2.2 AI system security vulnerabilities and attacks&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;weak provenance surface     &lt;/td&gt;&lt;td&gt;repository gives weak evidence about data/source traceability &lt;/td&gt;&lt;td&gt;&lt;code&gt;7.4 Lack of transparency or interpretability&lt;/code&gt;; possibly &lt;code&gt;6.5 Governance failure&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;silent mock fallback        &lt;/td&gt;&lt;td&gt;production-like path may fall back to simulated behavior      &lt;/td&gt;&lt;td&gt;&lt;code&gt;7.3 Lack of capability or robustness&lt;/code&gt;; &lt;code&gt;7.4 Lack of transparency or interpretability&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The mapping does not prove harm.&lt;/p&gt;
&lt;p&gt;It tells the reviewer which broader AIRI vocabulary may be relevant to the local finding.&lt;/p&gt;
&lt;p&gt;That is the difference between:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this detector proves a risk occurred&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this detector finding belongs near this risk-language area.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The second claim is weaker.&lt;/p&gt;
&lt;p&gt;It is also the correct claim.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-local-provenance-matters&quot;&gt;Why Local Provenance Matters&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5suzlt3jdnbanqzvc6e.png&quot; alt=&quot;Provenance is not cosmetic&quot;&gt;&lt;/p&gt;
&lt;p&gt;AIRI is external.&lt;/p&gt;
&lt;p&gt;That means STEM BIO-AI needs to answer governance questions explicitly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which upstream snapshot is being used?&lt;/li&gt;
&lt;li&gt;which subset is active at runtime?&lt;/li&gt;
&lt;li&gt;which risks are included in the curated bundle?&lt;/li&gt;
&lt;li&gt;which risks are known gaps?&lt;/li&gt;
&lt;li&gt;which detector maps to which AIRI entry?&lt;/li&gt;
&lt;li&gt;what version of the mapping is active?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is why the AIRI work matters.&lt;/p&gt;
&lt;p&gt;It is not just adding labels.&lt;/p&gt;
&lt;p&gt;It is turning risk vocabulary into a governed local data layer.&lt;/p&gt;
&lt;p&gt;In the current governance note, the upstream source is recorded as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;upstream source: &lt;code&gt;https://airisk.mit.edu/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;upstream artifact: &lt;code&gt;The AI Risk Repository V4_03&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;upstream license: &lt;code&gt;MIT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;local snapshot date: &lt;code&gt;2026-04-23&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That provenance is not cosmetic.&lt;/p&gt;
&lt;p&gt;It allows an audit artifact to say which risk vocabulary it was using when the scan was produced.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-is-implemented-in-the-current-1-7-5-state-of-1-7-x&quot;&gt;What Is Implemented in the Current 1.7.5 State of 1.7.x&lt;/h3&gt;
&lt;p&gt;The current AIRI layer is implemented, but bounded.&lt;/p&gt;
&lt;p&gt;Implemented surfaces include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AIRI-backed coverage surfaces in scan outputs&lt;/li&gt;
&lt;li&gt;local curated runtime bundle&lt;/li&gt;
&lt;li&gt;local registry and mapping schemas&lt;/li&gt;
&lt;li&gt;detector-to-AIRI mapping layer&lt;/li&gt;
&lt;li&gt;known-gap reporting&lt;/li&gt;
&lt;li&gt;provenance and bundle/source labeling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In current scan results, &lt;code&gt;airi_risk_coverage&lt;/code&gt; is the main artifact surface for this layer.&lt;/p&gt;
&lt;p&gt;The public result contract includes AIRI fields such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;airi_registry_version&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;airi_bundle_version&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;airi_mapping_version&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;airi_bundle_scope&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;airi_upstream_snapshot_date&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;airi_upstream_license&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;total_risks_in_registry&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;total_risks_in_bundle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;total_risks_in_detector_scope&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectors_triggered&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;covered_risks&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;covered_count&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;coverage_rate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;known_gaps_in_bundle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;known_gaps_outside_bundle&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These fields matter because they let a reviewer distinguish three things that are easy to confuse: the upstream AIRI source, the local runtime bundle, and the detector mapping actually used by the scan.&lt;/p&gt;
&lt;p&gt;The important part is not only that these fields exist.&lt;/p&gt;
&lt;p&gt;The important part is that AIRI usage becomes auditable from the artifact itself.&lt;/p&gt;
&lt;p&gt;If two scans use different AIRI snapshots or mappings, that difference should not be hidden.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;coverage-is-not-a-safety-percentage&quot;&gt;Coverage Is Not a Safety Percentage&lt;/h3&gt;
&lt;p&gt;AIRI coverage in STEM BIO-AI is an audit-surface concept, not a safety percentage.&lt;/p&gt;
&lt;p&gt;It does not mean:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the repository is safe&lt;/li&gt;
&lt;li&gt;the repository is unsafe&lt;/li&gt;
&lt;li&gt;the scanner covers all AI risk&lt;/li&gt;
&lt;li&gt;the covered percentage is a compliance score&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It means:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;a local deterministic finding has been mapped to a known risk-vocabulary entry inside the curated AIRI runtime layer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is useful because it gives reviewers a wider frame.&lt;/p&gt;
&lt;p&gt;But it does not turn local evidence into a global safety claim.&lt;/p&gt;
&lt;p&gt;This is the same discipline used elsewhere in STEM BIO-AI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scoring is not clinical validation&lt;/li&gt;
&lt;li&gt;advisory interpretation is not scoring authority&lt;/li&gt;
&lt;li&gt;reproducibility evidence is not automatic score authority&lt;/li&gt;
&lt;li&gt;AIRI coverage is not a safety percentage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each layer has a role.&lt;/p&gt;
&lt;p&gt;Each layer has a boundary.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-changed-in-1-7-x&quot;&gt;What Changed in 1.7.x&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;1.7.x&lt;/code&gt; AIRI story is not simply “we added AIRI.”&lt;/p&gt;
&lt;p&gt;The actual change was a move from loose risk labeling toward governed local vocabulary.&lt;/p&gt;
&lt;h4 id=&quot;1-7-0&quot;&gt;1.7.0&lt;/h4&gt;
&lt;p&gt;AIRI V4 integration appeared in scan outputs.&lt;/p&gt;
&lt;p&gt;The scanner began producing an &lt;code&gt;airi_risk_coverage&lt;/code&gt; section that maps triggered detector findings to AIRI risk IDs, coverage rate, and known gaps.&lt;/p&gt;
&lt;p&gt;The same release also introduced Layer 2 AST contract detectors such as &lt;code&gt;CC1&lt;/code&gt;, &lt;code&gt;CC2&lt;/code&gt;, and &lt;code&gt;CC3&lt;/code&gt;, which expanded the local detector surface available for risk-vocabulary mapping.&lt;/p&gt;
&lt;h4 id=&quot;1-7-1&quot;&gt;1.7.1&lt;/h4&gt;
&lt;p&gt;AIRI became a governed local data layer.&lt;/p&gt;
&lt;p&gt;The architecture separated:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;full local registry&lt;/li&gt;
&lt;li&gt;curated runtime bundle&lt;/li&gt;
&lt;li&gt;detector mapping registry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This release also replaced hardcoded AIRI detector mappings and known-gap lists with packaged local registry files.&lt;/p&gt;
&lt;p&gt;Runtime outputs began surfacing registry version, bundle version, mapping version, upstream snapshot date, license, attribution note, and split known gaps into &lt;code&gt;known_gaps_in_bundle&lt;/code&gt; and &lt;code&gt;known_gaps_outside_bundle&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;1-7-2&quot;&gt;1.7.2&lt;/h4&gt;
&lt;p&gt;No major AIRI architecture change.&lt;/p&gt;
&lt;p&gt;The important governance point was regression stability: same-target self-scan comparison verified no drift in &lt;code&gt;airi_risk_coverage&lt;/code&gt; alongside score, tier, code contract, detector summary, and evidence ledger count.&lt;/p&gt;
&lt;h4 id=&quot;1-7-3&quot;&gt;1.7.3&lt;/h4&gt;
&lt;p&gt;No major AIRI architecture change.&lt;/p&gt;
&lt;p&gt;The release focused on runtime cleanup, stale demo wording, layout stabilization, and output routing.&lt;/p&gt;
&lt;h4 id=&quot;1-7-4&quot;&gt;1.7.4&lt;/h4&gt;
&lt;p&gt;AIRI presentation became clearer across demo and report outputs.&lt;/p&gt;
&lt;p&gt;The release surfaced AIRI summary material more clearly across the Hugging Face overview card and markdown/explain report sections.&lt;/p&gt;
&lt;h4 id=&quot;1-7-5&quot;&gt;1.7.5&lt;/h4&gt;
&lt;p&gt;No new AIRI data architecture change.&lt;/p&gt;
&lt;p&gt;But artifact-level governance improved more broadly through additive evidence-ledger quality fields and audit-freshness metadata.&lt;/p&gt;
&lt;p&gt;That matters because AIRI is most useful when it lives inside a report surface that already carries freshness, evidence quality, and provenance signals.&lt;/p&gt;
&lt;p&gt;The important change across the line is this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;AIRI moved from attached dataset toward versioned local risk-vocabulary layer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-this-still-does-not-do&quot;&gt;What This Still Does Not Do&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/455nj5o0eixcl5y3g2ho.png&quot; alt=&quot;Local evidence first, external vocabulary second&quot;&gt;&lt;/p&gt;
&lt;p&gt;The AIRI layer still does not:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;verify real incidents&lt;/li&gt;
&lt;li&gt;prove causality&lt;/li&gt;
&lt;li&gt;certify repository safety&lt;/li&gt;
&lt;li&gt;replace domain review&lt;/li&gt;
&lt;li&gt;turn AIRI categories into deterministic truth claims&lt;/li&gt;
&lt;li&gt;collapse the full upstream AIRI universe into the runtime scanner&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are not missing features.&lt;/p&gt;
&lt;p&gt;They are the boundaries that keep the layer useful.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;where-this-could-go&quot;&gt;Where This Could Go&lt;/h3&gt;
&lt;p&gt;The next useful direction is not to overload the scanner with external systems.&lt;/p&gt;
&lt;p&gt;It is to improve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;registry provenance&lt;/li&gt;
&lt;li&gt;bundle governance&lt;/li&gt;
&lt;li&gt;mapping confidence&lt;/li&gt;
&lt;li&gt;known-gap clarity&lt;/li&gt;
&lt;li&gt;artifact-visible mapping metadata&lt;/li&gt;
&lt;li&gt;disciplined links to incident-oriented resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The broader MIT AIRI ecosystem also includes related incident-oriented resources such as the AI Incident Tracker.&lt;/p&gt;
&lt;p&gt;That ecosystem is relevant context, but it is not the same thing as current runtime integration in STEM BIO-AI.&lt;/p&gt;
&lt;p&gt;A future version may choose to reference incident-oriented resources more explicitly, but deterministic scans should not ingest them casually or blur them with repository-local findings.&lt;/p&gt;
&lt;p&gt;A future version should be able to say not only:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this detector maps to this AIRI risk vocabulary area.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But also:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this mapping has this confidence level, this review status, this local evidence family, and this known limitation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the next governance step.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-thought-1&quot;&gt;Final Thought&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qtlt5pk3yg79aconki1l.png&quot; alt=&quot;A governed bridge for STEM BIO-AI&quot;&gt;&lt;/p&gt;
&lt;p&gt;That is the role of AIRI in this release line.&lt;/p&gt;
&lt;p&gt;Not truth replacement.&lt;/p&gt;
&lt;p&gt;Not safety certification.&lt;/p&gt;
&lt;p&gt;Not incident proof.&lt;/p&gt;
&lt;p&gt;A governed vocabulary bridge.&lt;/p&gt;
&lt;p&gt;Local evidence first.&lt;/p&gt;
&lt;p&gt;External vocabulary second.&lt;/p&gt;
&lt;p&gt;Explicit provenance always.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;references-and-acknowledgment&quot;&gt;References and Acknowledgment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MIT AI Risk Repository: &lt;a rel=&quot;nofollow&quot; href=&quot;https://airisk.mit.edu/&quot;&gt;https://airisk.mit.edu/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MIT AI Incident Tracker: &lt;a rel=&quot;nofollow&quot; href=&quot;https://airisk.mit.edu/ai-incident-tracker&quot;&gt;https://airisk.mit.edu/ai-incident-tracker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;STEM BIO-AI repository: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/flamehaven01/STEM-BIO-AI&quot;&gt;https://github.com/flamehaven01/STEM-BIO-AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This AIRI-related direction in STEM BIO-AI was informed by broader public AI risk work, including the MIT AI Risk Repository ecosystem.&lt;/p&gt;
&lt;p&gt;The framing around AIRI as a broader risk-vocabulary layer, rather than a repository-local truth layer, was also strengthened by public commentary and ecosystem work from people in this space, including Peter Slattery, PhD.&lt;/p&gt;
&lt;p&gt;These references informed the vocabulary and governance direction described here. They do not imply endorsement of STEM BIO-AI or responsibility for its implementation choices.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17950/beyond-repo-scanning-how-airi-expanded-the-risk-vocabulary-in-stem-bio-ai-1-7-x</guid>
<pubDate>Fri, 15 May 2026 11:55:34 +0000</pubDate>
</item>
<item>
<title>When Control Becomes Authority: Calibration Governance in STEM BIO-AI 1.7.x</title>
<link>https://coderlegion.com/17790/when-control-becomes-authority-calibration-governance-in-stem-bio-ai-1-7-x</link>
<description>&lt;h2 id=&quot;when-control-becomes-authority-calibration-governance-in-stem-bio-ai-1-7-x&quot;&gt;When Control Becomes Authority: Calibration Governance in STEM BIO-AI 1.7.x&lt;/h2&gt;
&lt;p&gt;Control slowly becomes authority when nobody marks the boundary.&lt;/p&gt;
&lt;p&gt;That is the calibration problem I kept running into while building &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/flamehaven01/STEM-BIO-AI&quot;&gt;STEM BIO-AI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The project began as a deterministic evidence-surface scanner for bio and medical AI repositories. It inspected observable repository surfaces — README files, docs, code structure, CI, dependency manifests, changelogs, and boundary language — and mapped them to a structured review tier.&lt;/p&gt;
&lt;p&gt;That was useful.&lt;/p&gt;
&lt;p&gt;But the harder problem was not producing a number. The harder problem was preventing every useful adjacent signal from becoming part of that number.&lt;/p&gt;
&lt;p&gt;In a bio/medical AI repository review, several lanes can look similar if the tool is not careful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deterministic scoring&lt;/li&gt;
&lt;li&gt;diagnostic findings&lt;/li&gt;
&lt;li&gt;replication evidence&lt;/li&gt;
&lt;li&gt;advisory interpretation&lt;/li&gt;
&lt;li&gt;domain-specific review posture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They all matter. But they should not all have the same authority.&lt;/p&gt;
&lt;p&gt;The principle behind the &lt;code&gt;1.7.x&lt;/code&gt; calibration work is simple:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;easy experimentation, hard drift&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Researchers should be able to express review posture. Operators should be able to simulate policy changes. Artifacts should show policy metadata.&lt;/p&gt;
&lt;p&gt;But none of that should silently mutate the official score.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;current-1-7-5-boundary&quot;&gt;Current 1.7.5 Boundary&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1lcdsepmkhe1s4e9or9z.png&quot; alt=&quot;Formal score and advisory tuning drift&quot;&gt;&lt;/p&gt;
&lt;p&gt;This post describes the released &lt;code&gt;1.7.x&lt;/code&gt; state as of &lt;code&gt;v1.7.5&lt;/code&gt;, not a future authoritative-read-through design.&lt;/p&gt;
&lt;p&gt;The formal score currently comes from three weighted score-bearing stages, plus explicit penalty and cap logic:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Surface                   &lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Stage 1                   &lt;/td&gt;&lt;td&gt;README / stated evidence boundary&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Stage 2R                  &lt;/td&gt;&lt;td&gt;repo-local consistency&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Stage 3                   &lt;/td&gt;&lt;td&gt;code and bio-responsibility surface&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;C1                        &lt;/td&gt;&lt;td&gt;hardcoded-credential penalty&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;clinical cap / hard floor &lt;/td&gt;&lt;td&gt;score ceiling or T0 floor when clinical-adjacent boundary rules require it&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Stage 4 exists, but it is a separate replication lane. It reports reproducibility posture without automatically changing the formal score.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;1.7.5&lt;/code&gt;, STEM BIO-AI has implemented calibration architecture, but it remains mostly mirror-only and preview-oriented.&lt;/p&gt;
&lt;p&gt;Implemented surfaces include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;packaged calibration profiles&lt;/li&gt;
&lt;li&gt;schema and runtime validation&lt;/li&gt;
&lt;li&gt;profile identity surfaced in result metadata&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stem policy list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stem policy explain&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stem policy derive&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stem policy simulate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;simulation-only local profile files&lt;/li&gt;
&lt;li&gt;profile hashes and read-mode metadata in artifacts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The active named recommendation surface is intentionally narrow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;default&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strict_clinical_adjacency&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;reproducibility_first&lt;/code&gt; is still a draft posture, not an active release-grade named recommendation.&lt;/p&gt;
&lt;p&gt;The key boundary:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;the authoritative scan scoring path is still protected from arbitrary user-provided profile mutation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;scan --policy &amp;lt;name&amp;gt;&lt;/code&gt; can surface selected profile metadata. &lt;code&gt;policy derive&lt;/code&gt; and &lt;code&gt;policy simulate&lt;/code&gt; can show governed preview behavior. But user-provided profile files do not become official scoring authority.&lt;/p&gt;
&lt;p&gt;More specifically, local profile files are accepted only by &lt;code&gt;stem policy simulate&lt;/code&gt;, and the CLI rejects them unless the file remains &lt;code&gt;mirror_only&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That is not a missing convenience. It is the boundary being tested before it is allowed to become authority.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-calibration-is-not-a-tuning-console&quot;&gt;Why Calibration Is Not a Tuning Console&lt;/h3&gt;
&lt;p&gt;The wrong calibration UX looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;stage_1_percent&quot;: 30,
  &quot;stage_2r_percent&quot;: 25,
  &quot;stage_3_percent&quot;: 45,
  &quot;ca_no_disclaimer_cap&quot;: 61,
  &quot;b2_partial_credit_mode&quot;: &quot;looser&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is editable. But editable is not the same as governed.&lt;/p&gt;
&lt;p&gt;Most researchers do not think in raw score constants. They usually know something closer to this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;clinical-adjacent claims should be treated very strictly&lt;/li&gt;
&lt;li&gt;reproducibility matters strongly in this environment&lt;/li&gt;
&lt;li&gt;README polish should not outweigh code evidence&lt;/li&gt;
&lt;li&gt;a casual mention of &quot;limitations&quot; should not count as meaningful transparency&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the current design starts with posture questions, not raw constants.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-1-5-scale-is-input-not-authority&quot;&gt;The &lt;code&gt;1–5&lt;/code&gt; Scale Is Input, Not Authority&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/da62dggwxf9j1962dh7k.png&quot; alt=&quot;Posture over raw constants&quot;&gt;&lt;/p&gt;
&lt;p&gt;The user-facing intent layer uses a &lt;code&gt;1–5&lt;/code&gt; scale:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt; = minimal emphasis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;3&lt;/code&gt; = moderate emphasis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;5&lt;/code&gt; = very strong emphasis&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The important rule:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;the &lt;code&gt;1–5&lt;/code&gt; scale is a UX input surface, not part of the formal score engine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Users can express clinical strictness, code-integrity priority, reproducibility priority, and structured limitations requirements. But those answers do not directly become score constants.&lt;/p&gt;
&lt;p&gt;They pass through an explicit rule table:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Condition                                                      &lt;/th&gt;&lt;th&gt;Outcome&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;clinical_strictness &amp;gt;= 4&lt;/code&gt; and &lt;code&gt;reproducibility_priority &amp;lt;= 3&lt;/code&gt; &lt;/td&gt;&lt;td&gt;recommend &lt;code&gt;strict_clinical_adjacency&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;all four values are &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt;                                 &lt;/td&gt;&lt;td&gt;keep &lt;code&gt;default&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;no named-profile rule matches                                  &lt;/td&gt;&lt;td&gt;generate &lt;code&gt;preview_only&lt;/code&gt; bounded deltas&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This table is not an empirically optimized model. It is a conservative governance rule table.&lt;/p&gt;
&lt;p&gt;The threshold choices are design-steward decisions, not claims of statistical optimality. Their purpose is to keep the translation layer narrow, reviewable, and non-authoritative until a stronger benchmark-backed promotion process exists.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;clinical_strictness = 4
reproducibility_priority = 4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This does not automatically recommend &lt;code&gt;strict_clinical_adjacency&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It falls back to &lt;code&gt;preview_only&lt;/code&gt;, because two strong postures are competing and no release-grade named profile currently resolves that conflict.&lt;/p&gt;
&lt;p&gt;A hidden similarity function might look more flexible. It would also be harder to audit.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-cli-is-allowed-to-do&quot;&gt;What the CLI Is Allowed to Do&lt;/h3&gt;
&lt;p&gt;The preview workflow can look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem policy derive \
  --clinical-strictness 5 \
  --code-integrity-priority 4 \
  --reproducibility-priority 3 \
  --structured-limitations-requirement 4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem policy simulate /path/to/repo --profile-file my_profile.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But those flows are not the same as:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem scan /path/to/repo --stage1-weight 0.35 --cap 72
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first two are governed preview surfaces. The last one is an untracked tuning console.&lt;/p&gt;
&lt;p&gt;The design supports the first and rejects the shape of the last.&lt;/p&gt;
&lt;p&gt;That is the practical meaning of easy experimentation, hard drift.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-actually-gets-verified&quot;&gt;What Actually Gets Verified&lt;/h3&gt;
&lt;p&gt;The central claim is not:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;the current calibration rules are perfect.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The claim is narrower:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;calibration changes should not become score authority without a visible governance path.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That can be checked by asking whether the system blocks or exposes the relevant mutation paths:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Drift risk                        &lt;/th&gt;&lt;th&gt;Expected control&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;arbitrary score tuning            &lt;/td&gt;&lt;td&gt;no free-form CLI weight / cap override&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hidden profile mutation           &lt;/td&gt;&lt;td&gt;profile status and read mode surfaced&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;unclear profile identity          &lt;/td&gt;&lt;td&gt;profile name, version, and hash visible&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;advisory influence leakage        &lt;/td&gt;&lt;td&gt;advisory output cannot override &lt;code&gt;final_score&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;reproducibility overcompensation  &lt;/td&gt;&lt;td&gt;&lt;code&gt;replication_score&lt;/code&gt; does not change &lt;code&gt;formal_tier&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;premature named-profile expansion &lt;/td&gt;&lt;td&gt;ambiguous postures fall back to &lt;code&gt;preview_only&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;detector promotion drift          &lt;/td&gt;&lt;td&gt;detector policy is versioned in policy files and governance docs, though not yet first-class per-detector artifact metadata&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is not a full empirical benchmark. It is a governance verification target: the policy cannot quietly become authoritative without leaving a trace.&lt;/p&gt;
&lt;p&gt;That trace is stronger for some surfaces than others. Profile identity, hash, and read mode are already artifact-visible in &lt;code&gt;1.7.5&lt;/code&gt;. Detector promotion semantics are versioned and documented, but not yet surfaced as first-class per-detector policy metadata in the result object.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-b2-tightening-example&quot;&gt;The B2 Tightening Example&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wxrlajsvmqp5jiurvatd.png&quot; alt=&quot;Deterministic boundary changes in B2 tightening&quot;&gt;&lt;/p&gt;
&lt;p&gt;The clearest scoring example is Stage 3 B2: the bias and limitations measurement surface.&lt;/p&gt;
&lt;p&gt;Earlier behavior allowed a weaker boundary: a simple vocabulary-level signal could still receive partial credit.&lt;/p&gt;
&lt;p&gt;That became too permissive. A repository that mentions &quot;bias&quot; or &quot;limitations&quot; once is not necessarily disclosing a meaningful boundary. It may only be surface signaling.&lt;/p&gt;
&lt;p&gt;So the B2 rule became stricter:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Case                              &lt;/th&gt;&lt;th&gt;        Earlier posture &lt;/th&gt;&lt;th&gt;      Tightened posture&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;no bias / limitations vocabulary  &lt;/td&gt;&lt;td&gt;                      0 &lt;/td&gt;&lt;td&gt;                      0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;minimal single-term mention only  &lt;/td&gt;&lt;td&gt;partial credit possible &lt;/td&gt;&lt;td&gt;                      0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;structured limitations language   &lt;/td&gt;&lt;td&gt;partial credit possible &lt;/td&gt;&lt;td&gt;partial credit possible&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;quantitative measurement evidence &lt;/td&gt;&lt;td&gt;   full credit possible &lt;/td&gt;&lt;td&gt;   full credit possible&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The rule change creates a concrete score-path difference:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;a repository that previously depended only on a minimal single-term limitations mention no longer has a B2 partial-credit path after the tightening.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the current public claim.&lt;/p&gt;
&lt;p&gt;I am not presenting a benchmark-wide before/after score delta here, because that would require a pinned fixture set and published comparison protocol. Without that, a claimed &quot;T3 became T2&quot; example would be anecdotal at best.&lt;/p&gt;
&lt;p&gt;So the honest evidence level is rule-level impact:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the credit path changed&lt;/li&gt;
&lt;li&gt;the changed path is deterministic&lt;/li&gt;
&lt;li&gt;the changed path is inspectable&lt;/li&gt;
&lt;li&gt;benchmark-level deltas should be published only when the fixture protocol is pinned&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In clinical-adjacent repositories, limitation language is not decoration. It is part of the claim boundary.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-stage-4-stays-separate&quot;&gt;Why Stage 4 Stays Separate&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0dqje510bvt6vrw13vov.png&quot; alt=&quot;Importance is not score authority&quot;&gt;&lt;/p&gt;
&lt;p&gt;The strongest counterargument is fair:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If reproducibility is important, why does it not affect the formal score?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My answer is that importance and score authority are not the same thing.&lt;/p&gt;
&lt;p&gt;Stage 4 measures replication posture: containers, reproducibility targets, dependency locks, artifact references, seeds, citation surfaces, and similar evidence.&lt;/p&gt;
&lt;p&gt;Those signals matter.&lt;/p&gt;
&lt;p&gt;But they do not mean the same thing as the formal claim boundary.&lt;/p&gt;
&lt;p&gt;A repository can be highly reproducible and still make unsafe clinical claims. It can have clean containers while lacking a clinical-use disclaimer. It can be easy to rerun while still having weak data provenance or shallow limitation language.&lt;/p&gt;
&lt;p&gt;If Stage 4 lifted the formal score too early, reproducibility could compensate for claim-boundary weakness.&lt;/p&gt;
&lt;p&gt;That would be a different scoring philosophy.&lt;/p&gt;
&lt;p&gt;It may become valid in the future, but only if the rule is explicit.&lt;/p&gt;
&lt;p&gt;For now, Stage 4 remains separate because reproducibility should be visible and review-relevant without silently overriding the formal score boundary.&lt;/p&gt;
&lt;p&gt;That is why stronger reproducibility intent currently falls back to &lt;code&gt;preview_only&lt;/code&gt; instead of becoming a release-grade named profile.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;advisory-ai-uses-the-same-boundary&quot;&gt;Advisory AI Uses the Same Boundary&lt;/h3&gt;
&lt;p&gt;Advisory AI follows the same rule.&lt;/p&gt;
&lt;p&gt;Helpful interpretation is not score authority.&lt;/p&gt;
&lt;p&gt;STEM BIO-AI can export provider-neutral advisory packets and validate downstream advisory responses, but the deterministic scanner does not need an external model runtime to produce the formal score.&lt;/p&gt;
&lt;p&gt;Unless a future release explicitly changes the policy, advisory output remains structurally subordinate to the deterministic score.&lt;/p&gt;
&lt;p&gt;The broader advisory boundary is a separate topic.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-scoring-tool-to-audit-workflow&quot;&gt;From Scoring Tool to Audit Workflow&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hihip6jhydpu5n3hszqd.png&quot; alt=&quot;From scoring tool to audit custody&quot;&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;1.7.x&lt;/code&gt; transition is best understood as a shift in questions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Earlier scoring-tool question      &lt;/th&gt;&lt;th&gt;Audit-workflow question&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;What score did the repository get? &lt;/td&gt;&lt;td&gt;Which policy profile was visible when the score was produced?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Which stage contributed most?      &lt;/td&gt;&lt;td&gt;Was that stage score-authoritative, diagnostic, or separate-lane evidence?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;What evidence triggered the tier?  &lt;/td&gt;&lt;td&gt;Did the evidence change the formal score or only the review posture?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;What should the user fix?          &lt;/td&gt;&lt;td&gt;Would a proposed policy change be preview-only, experimental, benchmark-candidate, or release-authoritative?&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The score still matters.&lt;/p&gt;
&lt;p&gt;But the system is increasingly designed around the custody of the score: where it came from, what was allowed to influence it, and what was intentionally kept outside it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-this-still-does-not-do-1&quot;&gt;What This Still Does Not Do&lt;/h3&gt;
&lt;p&gt;STEM BIO-AI still does not:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;validate biomedical efficacy&lt;/li&gt;
&lt;li&gt;certify benchmark truth&lt;/li&gt;
&lt;li&gt;determine clinical deployment safety&lt;/li&gt;
&lt;li&gt;let advisory AI overwrite the formal score&lt;/li&gt;
&lt;li&gt;open arbitrary numeric tuning in the official scan path&lt;/li&gt;
&lt;li&gt;allow profile experimentation to become official policy without governance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are not missing conveniences. They are boundaries.&lt;/p&gt;
&lt;p&gt;A strong repository evidence tier is still an observable repository-surface signal. It is not clinical clearance, regulatory approval, or proof of biomedical validity.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-next-version-direction&quot;&gt;The Next Version Direction&lt;/h3&gt;
&lt;p&gt;The next important step is not adding more knobs.&lt;/p&gt;
&lt;p&gt;It is authoritative policy read-through in parity mode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the default policy profile becomes the source read by the scoring path&lt;/li&gt;
&lt;li&gt;existing fixtures should show no score or tier drift&lt;/li&gt;
&lt;li&gt;policy hashes remain visible in artifacts&lt;/li&gt;
&lt;li&gt;non-default and researcher-provided profiles remain governed preview surfaces until promoted&lt;/li&gt;
&lt;li&gt;score-affecting policy changes become explicit release events&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not a big-bang rewrite.&lt;/p&gt;
&lt;p&gt;It is authority relocation.&lt;/p&gt;
&lt;p&gt;The goal is to move score-affecting constants into versioned policy objects without changing the score by accident.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-position&quot;&gt;Final Position&lt;/h3&gt;
&lt;p&gt;The calibration problem is not really about giving users more control.&lt;/p&gt;
&lt;p&gt;It is about deciding when control becomes authority.&lt;/p&gt;
&lt;p&gt;If every useful signal can gradually influence the score, the score stops being an audit artifact.&lt;/p&gt;
&lt;p&gt;It becomes a negotiation.&lt;/p&gt;
&lt;p&gt;That is what STEM BIO-AI is trying to avoid.&lt;/p&gt;
&lt;p&gt;Researchers should be able to express posture. Operators should be able to simulate alternatives. Policy stewards should be able to promote changes.&lt;/p&gt;
&lt;p&gt;But the formal score should not move unless the governance path says it moved.&lt;/p&gt;
&lt;p&gt;That is the difference between a tuning console and an audit system.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17790/when-control-becomes-authority-calibration-governance-in-stem-bio-ai-1-7-x</guid>
<pubDate>Thu, 14 May 2026 05:50:41 +0000</pubDate>
</item>
<item>
<title>From Score to Workflow: Turning STEM BIO-AI Into a Local Audit System</title>
<link>https://coderlegion.com/17028/from-score-to-workflow-turning-stem-bio-ai-into-a-local-audit-system</link>
<description>&lt;p&gt;Earlier in this series, I wrote about why bio/medical AI repositories need more than benchmarks, what I learned after auditing 10 public repositories, and why an AI auditor itself needs a memory contract.&lt;/p&gt;
&lt;p&gt;That work led to STEM-AI v1.1.2 and the MICA layer: a memory-contracted initialization step that forces the auditor to load bounded rules before scoring begins.&lt;/p&gt;
&lt;p&gt;For the broader arc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/flamehaven01/series/37087&quot;&gt;STEM-AI / STEM BIO-AI series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But after that, a different engineering problem took over.&lt;/p&gt;
&lt;p&gt;The audit logic was stricter.&lt;br&gt;
The reports were richer.&lt;br&gt;
The reasoning was more bounded.&lt;/p&gt;
&lt;p&gt;But the developer workflow still felt too loose.&lt;/p&gt;
&lt;p&gt;So the next question was no longer:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;How do I score trust?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It became:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;How does a bio-AI audit tool become something an engineer can actually run, gate, inspect, and integrate?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The answer turned out to be less about seeing more signals and more about refusing to confuse them.&lt;/p&gt;
&lt;p&gt;That is the core argument of this post:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;A detector becomes more trustworthy when it is strict about what it cannot conclude.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once I took that seriously, STEM BIO-AI stopped looking like “one score plus some extra metadata” and started looking like a system with distinct lanes, distinct boundaries, and distinct operator workflows.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-problem-was-no-longer-scoring&quot;&gt;&lt;strong&gt;The problem was no longer scoring&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gevfs1ir5axbqcnehca4.png&quot; alt=&quot;The problem was no longer scoring&quot;&gt;&lt;/p&gt;
&lt;p&gt;By the time I reached the 1.6.x line, the rubric was no longer the main bottleneck.&lt;/p&gt;
&lt;p&gt;The bottleneck was operational clarity.&lt;/p&gt;
&lt;p&gt;A trust audit tool is not very useful if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the normal path is one long command with too many flags&lt;/li&gt;
&lt;li&gt;CI has to reverse-engineer the result from human-readable stdout&lt;/li&gt;
&lt;li&gt;bio-specific diagnostics are mixed directly into the same surface as formal scoring&lt;/li&gt;
&lt;li&gt;regulatory relevance shows up as vague implication instead of explicit traceability&lt;/li&gt;
&lt;li&gt;advisory AI is present, but its relationship to the official score is unclear&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At that point, the tool stops being hard to trust for conceptual reasons and starts being hard to trust for operational reasons.&lt;/p&gt;
&lt;p&gt;That is a different class of problem.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-cli-had-to-reflect-operator-intent&quot;&gt;&lt;strong&gt;The CLI had to reflect operator intent&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The earlier CLI was functional, but too flat.&lt;/p&gt;
&lt;p&gt;You could do things like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem /path/to/repo --level 3 --format all --explain
stem /path/to/repo --tier-gate T3 --format json --quiet
stem /path/to/repo --advisory packet
stem /path/to/repo --advisory-response provider_advisory.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;All of that worked.&lt;/p&gt;
&lt;p&gt;The issue was that it treated very different operator intents as one long option surface.&lt;/p&gt;
&lt;p&gt;In practice, these are separate workflows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scan a repository and generate artifacts&lt;/li&gt;
&lt;li&gt;enforce a gate in CI/CD&lt;/li&gt;
&lt;li&gt;export a bounded advisory packet&lt;/li&gt;
&lt;li&gt;validate a downstream provider response&lt;/li&gt;
&lt;li&gt;cross an explicit provider-call boundary&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I refactored the CLI around workflows instead of flag accumulation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem scan &amp;lt;folder&amp;gt;
stem gate &amp;lt;folder&amp;gt; --min-tier T2
stem advisory validate &amp;lt;folder&amp;gt;
stem advisory packet &amp;lt;folder&amp;gt;
stem advisory call &amp;lt;folder&amp;gt;
stem advisory check-response &amp;lt;folder&amp;gt; --response FILE
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The older paths still exist for compatibility:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem &amp;lt;folder&amp;gt;
stem audit &amp;lt;folder&amp;gt;
stem &amp;lt;folder&amp;gt; --tier-gate T2 --quiet
stem &amp;lt;folder&amp;gt; --advisory packet
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But they are no longer the conceptual center.&lt;/p&gt;
&lt;p&gt;That matters more than it sounds.&lt;/p&gt;
&lt;p&gt;Once the command names match the operator’s intent, the system becomes easier to teach, easier to remember, and easier to wire into pipelines.&lt;/p&gt;
&lt;p&gt;This is not just a DX cleanup. In a medical or bio-adjacent audit context, command ambiguity is part of the trust problem.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;repository-trust-needed-four-separate-lanes&quot;&gt;&lt;strong&gt;Repository trust needed four separate lanes&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8cnkkkskgtmge5xk6hwe.png&quot; alt=&quot;Repository trust needed four separate lanes&quot;&gt;&lt;/p&gt;
&lt;p&gt;This was the biggest architectural shift.&lt;/p&gt;
&lt;p&gt;I stopped treating repository trust as one object.&lt;/p&gt;
&lt;p&gt;In practice, it needed four separate lanes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;deterministic structural scoring&lt;/li&gt;
&lt;li&gt;deterministic diagnostics&lt;/li&gt;
&lt;li&gt;regulatory traceability&lt;/li&gt;
&lt;li&gt;optional AI advisory&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If all of those collapse into one final confidence score, the tool becomes harder to reason about.&lt;/p&gt;
&lt;p&gt;The more regulated the domain, the more dangerous it becomes to collapse every useful signal into one score.&lt;/p&gt;
&lt;p&gt;Some evidence should change the score.&lt;br&gt;
Some evidence should only raise review priority.&lt;br&gt;
Some evidence should support traceability.&lt;br&gt;
Some evidence should be handed to a human or advisory system.&lt;/p&gt;
&lt;p&gt;The maturity of the tool is not that it sees all of them.&lt;/p&gt;
&lt;p&gt;The maturity is that it does not confuse them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;this-separation-is-not-just-conceptual-it-exists-in-the-code-path-&quot;&gt;&lt;strong&gt;This separation is not just conceptual. It exists in the code path.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;One reasonable objection to any architecture write-up is: are these really separate lanes, or are they just different labels on the same output object?&lt;/p&gt;
&lt;p&gt;In STEM BIO-AI, the answer is visible in the execution order.&lt;/p&gt;
&lt;p&gt;The scanner computes the formal score first. In the result object, that means keys like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stage 1&lt;/li&gt;
&lt;li&gt;Stage 2R&lt;/li&gt;
&lt;li&gt;Stage 3&lt;/li&gt;
&lt;li&gt;risk penalty&lt;/li&gt;
&lt;li&gt;score cap&lt;/li&gt;
&lt;li&gt;&lt;code&gt;final_score&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;formal_tier&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only after that does it append the non-scoring layers, again as explicit result keys:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;regulatory_basis&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stage_traceability&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regulatory_traceability&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reasoning_model&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;optional &lt;code&gt;ai_advisory&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That ordering matters.&lt;/p&gt;
&lt;p&gt;The score is not derived from the advisory lane.&lt;br&gt;
The regulatory mapping does not mutate the formal tier.&lt;br&gt;
The diagnostics lane can emit evidence without becoming a hidden score multiplier.&lt;/p&gt;
&lt;p&gt;That is why the next four sections exist.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-deterministic-structural-scoring&quot;&gt;&lt;strong&gt;1. Deterministic structural scoring&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jtrypiyfrasqki89isbj.png&quot; alt=&quot;The official baseline for triage&quot;&gt;&lt;/p&gt;
&lt;p&gt;This remains the official score and tier.&lt;/p&gt;
&lt;p&gt;It measures the main repository-visible signals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;README evidence&lt;/li&gt;
&lt;li&gt;repo-local consistency&lt;/li&gt;
&lt;li&gt;code and bio responsibility&lt;/li&gt;
&lt;li&gt;dependency hygiene&lt;/li&gt;
&lt;li&gt;changelog and provenance surfaces&lt;/li&gt;
&lt;li&gt;code-integrity patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This lane is local, deterministic, and machine-checkable.&lt;/p&gt;
&lt;p&gt;That is the part that can legitimately drive a formal triage tier.&lt;/p&gt;
&lt;p&gt;I am not claiming this is the only possible architecture. A different system could have folded diagnostics or replication more aggressively into one unified score.&lt;/p&gt;
&lt;p&gt;I chose not to, because the narrower score proved easier to defend. A smaller claim with cleaner boundaries was more valuable here than a broader score with ambiguous semantics.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-deterministic-diagnostics&quot;&gt;&lt;strong&gt;2. Deterministic diagnostics&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This is where the deterministic diagnostics spec became important.&lt;/p&gt;
&lt;p&gt;I needed a place for findings that are real, useful, and inspectable, but should not silently perturb the main score until they are calibrated.&lt;/p&gt;
&lt;p&gt;That is what &lt;code&gt;docs/DETERMINISTIC_DIAGNOSTICS.md&lt;/code&gt; defines.&lt;/p&gt;
&lt;p&gt;It separates the diagnostic problem into two lanes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lane A: deterministic local diagnostics&lt;/li&gt;
&lt;li&gt;Lane B: optional AI-assisted semantic review&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That separation is central.&lt;/p&gt;
&lt;p&gt;The deterministic lane is authoritative for hard findings.&lt;br&gt;
The AI lane is advisory only.&lt;/p&gt;
&lt;p&gt;The local diagnostic lane currently focuses on evidence-bearing bio-specific signals such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;malformed or suspicious SMILES-like outputs&lt;/li&gt;
&lt;li&gt;missing parser guards&lt;/li&gt;
&lt;li&gt;silent mock or simulated-data fallbacks&lt;/li&gt;
&lt;li&gt;risky subprocess construction around bio tools&lt;/li&gt;
&lt;li&gt;traceability manifest surfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The point was not to create a “bio slop detector” with a catchy label.&lt;/p&gt;
&lt;p&gt;The point was to create a local evidence lane that could say:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;here is the file&lt;/li&gt;
&lt;li&gt;here is the line&lt;/li&gt;
&lt;li&gt;here is the snippet&lt;/li&gt;
&lt;li&gt;here is the bounded interpretation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is much more useful than a vague semantic warning.&lt;/p&gt;
&lt;h4 id=&quot;why-diagnostics-stayed-evidence-only&quot;&gt;Why diagnostics stayed evidence-only&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4uyzvdequdx3f2juhj58.png&quot; alt=&quot;Retaining evidence without inflating the score&quot;&gt;&lt;/p&gt;
&lt;p&gt;This was one of the harder engineering decisions.&lt;/p&gt;
&lt;p&gt;It would have been easy to push every new bio-specific detector directly into the final score.&lt;/p&gt;
&lt;p&gt;I did not do that.&lt;/p&gt;
&lt;p&gt;The deterministic diagnostics spec is explicit that many of these findings begin as evidence-only. In practice, they are emitted as line-level records in the result object's &lt;code&gt;evidence_ledger&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;findings are emitted into the result object’s &lt;code&gt;evidence_ledger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;findings appear in Markdown and &lt;code&gt;--explain&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;findings do not change &lt;code&gt;final_score&lt;/code&gt; or &lt;code&gt;formal_tier&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the right default.&lt;/p&gt;
&lt;p&gt;For example, the SMILES lane can be very useful for detecting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;malformed surface strings&lt;/li&gt;
&lt;li&gt;low-entropy placeholders&lt;/li&gt;
&lt;li&gt;repeated trivial outputs&lt;/li&gt;
&lt;li&gt;missing parser guards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But it does not prove:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;medicinal usefulness&lt;/li&gt;
&lt;li&gt;synthetic feasibility&lt;/li&gt;
&lt;li&gt;binding plausibility&lt;/li&gt;
&lt;li&gt;biological efficacy&lt;/li&gt;
&lt;li&gt;full chemical validity in every edge case&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That boundary is important.&lt;/p&gt;
&lt;p&gt;A detector becomes more trustworthy when it is strict about what it cannot conclude.&lt;/p&gt;
&lt;p&gt;Evidence-only is the temporary safe default until a detector has earned score authority through commit-pinned benchmark evidence, false-positive review, and reproducible calibration.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-regulatory-traceability&quot;&gt;&lt;strong&gt;3. Regulatory traceability&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tesjgssomvk8xj4t0sye.png&quot; alt=&quot;Traceability is not a permission slip&quot;&gt;&lt;/p&gt;
&lt;p&gt;The second document that became central was &lt;code&gt;docs/REGULATORY_MAPPING.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This solved a different problem.&lt;/p&gt;
&lt;p&gt;Once you audit clinical-adjacent repositories, people naturally ask:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;does this align with EU AI Act themes?&lt;/li&gt;
&lt;li&gt;does this help with FDA-oriented review?&lt;/li&gt;
&lt;li&gt;is there anything relevant to IMDRF or SaMD evidence families?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The wrong answer would be to turn those questions into a fake compliance score.&lt;/p&gt;
&lt;p&gt;So I did the opposite.&lt;/p&gt;
&lt;p&gt;The regulatory layer is explicitly framed as:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;a traceability aid, not a compliance verdict&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That document maps observed evidence classes to requirement families with bounded confidence labels like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;strong&lt;/li&gt;
&lt;li&gt;moderate&lt;/li&gt;
&lt;li&gt;weak-moderate&lt;/li&gt;
&lt;li&gt;weak&lt;/li&gt;
&lt;li&gt;not assessed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;the confidence applies to the mapping relationship, not to legal acceptability.&lt;/p&gt;
&lt;p&gt;That means the tool can say things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;versioned manifests and changelogs may support record-keeping / traceability review&lt;/li&gt;
&lt;li&gt;intended-use and disclaimer sections may support transparency scaffolding review&lt;/li&gt;
&lt;li&gt;override interfaces may support human-oversight interface review&lt;/li&gt;
&lt;li&gt;subgroup measurement language may support weak evidence of data-governance intent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;without claiming:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;legal compliance&lt;/li&gt;
&lt;li&gt;regulatory clearance&lt;/li&gt;
&lt;li&gt;clinical certification&lt;/li&gt;
&lt;li&gt;deployer conformance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In a regulated domain, traceability is useful only when it does not pretend to be permission.&lt;/p&gt;
&lt;h4 id=&quot;a-concrete-example-why-article-12-is-traceability-not-compliance&quot;&gt;A concrete example: why Article 12 is traceability, not compliance&lt;/h4&gt;
&lt;p&gt;The best example here is EU AI Act Article 12 style traceability.&lt;/p&gt;
&lt;p&gt;The regulatory mapping layer treats signals like:&lt;/p&gt;
&lt;p&gt;The regulatory mapping layer treats signals like changelogs, checksum manifests, versioned config surfaces, audit-log schema fragments, and decision-event or override-event schema tokens as evidence that a repository may have traceability scaffolding.&lt;/p&gt;
&lt;p&gt;That is useful.&lt;/p&gt;
&lt;p&gt;It is also bounded.&lt;/p&gt;
&lt;p&gt;Changelog presence is not the same thing as deploy-time event logging. Current scope does not establish runtime log completeness.&lt;/p&gt;
&lt;p&gt;So the output can legitimately say:&lt;/p&gt;
&lt;p&gt;there is structural evidence relevant to traceability review&lt;/p&gt;
&lt;p&gt;while refusing to say:&lt;/p&gt;
&lt;p&gt;this system satisfies traceability obligations&lt;/p&gt;
&lt;p&gt;What this buys in practice is not a compliance shortcut, but a faster review question. If a repository exposes none of the scaffolding signals in this lane, there is little reason to treat it as traceability-ready for deeper institutional review. If those signals do exist, the next step is still expert inspection, but the scanner has opened the right folder and pointed at the right files.&lt;/p&gt;
&lt;h4 id=&quot;why-regulatory-mapping-stayed-subordinate-to-evidence&quot;&gt;Why regulatory mapping stayed subordinate to evidence&lt;/h4&gt;
&lt;p&gt;Regulatory relevance had to remain downstream from evidence, not a score multiplier pretending to be law.&lt;/p&gt;
&lt;p&gt;That is why the output shape separates things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;regulatory_basis&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stage_traceability&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regulatory_traceability&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;from the actual score computation.&lt;/p&gt;
&lt;p&gt;The regulatory basis object is registry-driven. It can mark &lt;code&gt;review_required&lt;/code&gt; when the basis registry is stale or required source families are missing. That is a traceability control on the mapping layer itself, not an input into the scoring formula.&lt;/p&gt;
&lt;p&gt;If a repo has traceability-relevant scaffolding, that is useful.&lt;/p&gt;
&lt;p&gt;If a repo has traceability-relevant scaffolding, that is still not compliance.&lt;/p&gt;
&lt;p&gt;The distinction has to remain visible in both the code and the artifacts.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-optional-ai-advisory&quot;&gt;&lt;strong&gt;4. Optional AI advisory&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3zlifs3rxmxuwm87n8z0.png&quot; alt=&quot;Enforcing a bounded intelligence sandbox&quot;&gt;&lt;/p&gt;
&lt;p&gt;The fourth lane is the advisory layer.&lt;/p&gt;
&lt;p&gt;This one exists for bounded model-assisted review, but it does not get to rewrite the official outcome.&lt;/p&gt;
&lt;p&gt;That means workflows like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem advisory packet /path/to/repo
stem advisory check-response /path/to/repo --response provider_advisory.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;can exist without creating ambiguity about who owns the formal result.&lt;/p&gt;
&lt;p&gt;The advisory layer can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;export a provider-neutral packet&lt;/li&gt;
&lt;li&gt;validate downstream response structure&lt;/li&gt;
&lt;li&gt;enforce finding-ID citation rules&lt;/li&gt;
&lt;li&gt;reject prohibited claims&lt;/li&gt;
&lt;li&gt;surface runtime and secret boundaries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What it cannot do is silently override:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;score.final_score&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;score.formal_tier&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;how-that-rule-is-actually-enforced&quot;&gt;How that rule is actually enforced&lt;/h4&gt;
&lt;p&gt;The advisory validator explicitly checks for score-override attempts. If a response includes fields like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;final_score&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;formal_tier&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replication_score&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replication_tier&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;or sets &lt;code&gt;final_score_override&lt;/code&gt;, the response is marked invalid with &lt;code&gt;final_score_override_requested&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The packet contract also exports the rule in plain language:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Do not modify or override &lt;code&gt;final_score&lt;/code&gt;, &lt;code&gt;formal_tier&lt;/code&gt;, &lt;code&gt;replication_score&lt;/code&gt;, or &lt;code&gt;replication_tier&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Provider responses must cite exact values from &lt;code&gt;allowed_finding_ids&lt;/code&gt;; citation strings are not repaired or loosely matched later.&lt;/p&gt;
&lt;p&gt;So the advisory lane is bounded in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it has no authority to change the deterministic result&lt;/li&gt;
&lt;li&gt;it cannot cite evidence outside the bounded packet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the kind of mechanism I mean when I say “better boundaries.” If the rule cannot be checked, it is not really part of the architecture yet.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-operational-use-looks-like-now&quot;&gt;&lt;strong&gt;What operational use looks like now&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nqaat0z96ca7h4e0obx8.png&quot; alt=&quot;One execution driving distinct operator surfaces&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once these lanes were separated, the CLI became much easier to reason about.&lt;/p&gt;
&lt;p&gt;Local engineering review:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem scan /path/to/repo --level 3 --format all --explain
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CI/CD gate:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem gate /path/to/repo --min-tier T2 --summary off --output results
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Offline advisory packet generation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem advisory packet /path/to/repo --output advisory_out
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Downstream provider response validation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stem advisory check-response /path/to/repo --response provider_advisory.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The important point is not just that these commands exist.&lt;/p&gt;
&lt;p&gt;It is that each one represents a distinct trust boundary.&lt;/p&gt;
&lt;p&gt;That made the project feel more like engineering infrastructure and less like a scoring demo.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-real-v1-6-2-packet&quot;&gt;&lt;strong&gt;A real v1.6.2 packet&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;To make that less abstract, I re-ran STEM BIO-AI v1.6.2 against a local clone of &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/ClawBio/ClawBio&quot;&gt;ClawBio&lt;/a&gt;, which describes itself as a local-first, privacy-focused, reproducible bioinformatics-native AI skill library.&lt;/p&gt;
&lt;p&gt;The command was:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python -m stem_ai.cli scan /path/to/ClawBio --level 3 --format all --explain
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/itfu4woqxooan1vs88zb.png&quot; alt=&quot;ClawBio_ClawBio_detailed_5p-1&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b6lqg9kj5y8v5n0vcpia.png&quot; alt=&quot;ClawBio_ClawBio_detailed_5p-2&quot;&gt;&lt;/p&gt;
&lt;p&gt;On my machine, the scan took about 9.4 seconds and produced the normal artifact set:&lt;/p&gt;
&lt;p&gt;JSON for automation&lt;br&gt;
Markdown for review&lt;br&gt;
PDF for human-facing packet inspection&lt;br&gt;
--explain for file / line / snippet proof tracing&lt;/p&gt;
&lt;p&gt;The result was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;67 / 100&lt;/li&gt;
&lt;li&gt;T2 Caution&lt;/li&gt;
&lt;li&gt;Replication lane: 55 / 100 (R2)&lt;/li&gt;
&lt;li&gt;Clinical adjacency: CA-DIRECT&lt;/li&gt;
&lt;li&gt;Code integrity warnings: C2 dependency pinning, C4 exception handling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two details mattered.&lt;/p&gt;
&lt;p&gt;First, the scanner did not manufacture chemistry findings just because the repository was bio-adjacent. The SMILES diagnostics stayed not_detected or not_applicable.&lt;/p&gt;
&lt;p&gt;Second, the scanner enforced observable repository conventions. Because ClawBio used ClawBio_README_Repo.md rather than a root README.md, the scan recorded S1_missing_readme: -20.&lt;/p&gt;
&lt;p&gt;A human reviewer might contextualize that differently. The scanner does not. It records what the repository exposes through the surfaces it knows how to measure.&lt;/p&gt;
&lt;p&gt;That is the point of the workflow: not to replace review, but to make the review surface inspectable.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-still-has-to-stay-bounded&quot;&gt;&lt;strong&gt;What still has to stay bounded&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The system is better than it was, but three boundaries still matter.&lt;/p&gt;
&lt;p&gt;First, the public surface is broad. Scoring, diagnostics, replication, advisory packets, regulatory traceability, JSON, Markdown, PDF, and explain traces are all useful, but they increase onboarding cost.&lt;/p&gt;
&lt;p&gt;Second, diagnostics should stay evidence-first until they have benchmark-backed calibration. Commit-pinned fixtures, reproducible output, and explicit false-positive review should come before score authority.&lt;/p&gt;
&lt;p&gt;Third, regulatory confidence labels should remain bounded. They are rule-authored mapping labels, not runtime model outputs and not empirical proof of legal acceptability.&lt;/p&gt;
&lt;p&gt;Those limits are not weaknesses.&lt;/p&gt;
&lt;p&gt;They are part of the trust boundary.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;try-it-yourself&quot;&gt;&lt;strong&gt;Try it yourself&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;STEM BIO-AI is Apache 2.0 and fully open source.&lt;/p&gt;
&lt;p&gt;If you want to know whether a bio/medical AI repository is actually exposing reviewable evidence, or whether your own repository is weaker than you think, run it yourself.&lt;/p&gt;
&lt;p&gt;That is the real test.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/flamehaven01/STEM-BIO-AI&quot;&gt;https://github.com/flamehaven01/STEM-BIO-AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;License: Apache 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-thought-2&quot;&gt;&lt;strong&gt;Final thought&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The earlier STEM-AI posts were about why repository trust deserves its own audit layer.&lt;/p&gt;
&lt;p&gt;This phase was about something more practical:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;what does that audit layer have to look like if an engineer is actually going to run it, inspect it, and put it in a pipeline?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For me, the answer was simple:&lt;/p&gt;
&lt;p&gt;Separate the workflows.&lt;br&gt;
Separate the lanes.&lt;br&gt;
Keep diagnostics evidence-first.&lt;br&gt;
Keep regulatory mapping subordinate to evidence.&lt;br&gt;
Keep advisory AI bounded.&lt;/p&gt;
&lt;p&gt;Optimize for inspectability, not just score production.&lt;/p&gt;
&lt;p&gt;That is what changed the project.&lt;/p&gt;
&lt;p&gt;Not bigger claims.&lt;/p&gt;
&lt;p&gt;Better boundaries.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m6pay2ivnar9ryd22kjk.png&quot; alt=&quot;Final thought&quot;&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17028/from-score-to-workflow-turning-stem-bio-ai-into-a-local-audit-system</guid>
<pubDate>Fri, 08 May 2026 08:39:48 +0000</pubDate>
</item>
<item>
<title>STEM BIO-AI : Trust Bio Audit Framework</title>
<link>https://coderlegion.com/16773/stem-bio-ai-trust-bio-audit-framework</link>
<description>&lt;p&gt; Release: STEM BIO-AI v1.5.8&lt;/p&gt;
&lt;p&gt;I have open-sourced an internal BioAI governance scanner under Apache-2.0.&lt;/p&gt;
&lt;p&gt;STEM BIO-AI is a deterministic evidence-surface scanner for bio/medical AI repositories.&lt;/p&gt;
&lt;p&gt;Built for the checkpoint most teams skip.&lt;/p&gt;
&lt;p&gt;Bio/medical AI repositories are hard to evaluate quickly and consistently.&lt;/p&gt;
&lt;p&gt;Some are rigorous academic tools.&lt;br&gt;
Some are early research prototypes.&lt;br&gt;
Some look mature but carry clinical language before provenance, reproducibility, or clinical-use boundaries are clear.&lt;/p&gt;
&lt;p&gt;That creates a governance gap.&lt;/p&gt;
&lt;p&gt;Before a repository is trusted, adopted, integrated, or used as part of a clinical-adjacent workflow, teams need a basic answer:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What evidence is actually visible here?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;STEM BIO-AI makes that repository evidence surface visible.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;core-features-&quot;&gt;Core features:&lt;/h4&gt;
&lt;p&gt;▪️ No LLM&lt;br&gt;
▪️ No API key&lt;br&gt;
▪️ No model runtime&lt;br&gt;
▪️ No secrets sent anywhere&lt;br&gt;
▪️ Fast local or public GitHub repo triage&lt;br&gt;
▪️ Deterministic scoring&lt;br&gt;
▪️ T0–T4 evidence-tier output&lt;br&gt;
▪️ JSON, Markdown, PDF, and explain-trace artifacts&lt;br&gt;
▪️ Findings linked to file, line, pattern, or missing signal&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;how-it-works-&quot;&gt;How it works:&lt;/h4&gt;
&lt;p&gt;Run it on a local clone or public GitHub repository.&lt;/p&gt;
&lt;p&gt;It checks four evidence lanes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Claim Surface&lt;br&gt;
Clinical language, hype claims, limitations, disclaimers, regulatory framing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repository Consistency&lt;br&gt;
README, docs, metadata, tests, CI, workflow claims, version signals.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Engineering Accountability&lt;br&gt;
CI/CD, domain tests, changelog hygiene, data provenance, bias / limitation evidence.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Replication Evidence&lt;br&gt;
Containers, dependency locks, reproducibility targets, dataset or model references, CLI and citation signals.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Additional checks include hardcoded credentials, weak dependency pinning, deprecated patient-adjacent paths, and fail-open exception handlers.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;why-this-matters-&quot;&gt;Why this matters:&lt;/h4&gt;
&lt;p&gt;Most AI governance discussions start at the model layer.&lt;/p&gt;
&lt;p&gt;But in BioAI, risk often appears earlier — in repository claims, missing provenance, weak reproducibility, stale tests, undocumented assumptions, and demos that look more mature than their evidence supports.&lt;/p&gt;
&lt;p&gt;STEM BIO-AI is designed for that earlier review point:&lt;/p&gt;
&lt;p&gt;before procurement,&lt;br&gt;
before pilot review,&lt;br&gt;
before technical due diligence,&lt;br&gt;
before an AI demo becomes an AI system.&lt;/p&gt;
&lt;p&gt;STEM BIO-AI is not a generic linter.&lt;br&gt;
Not a benchmark leaderboard.&lt;br&gt;
Not an LLM-based reviewer.&lt;/p&gt;
&lt;p&gt;It is a repository-level evidence scanner for bio/medical AI governance.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;built-for-&quot;&gt;Built for:&lt;/h4&gt;
&lt;p&gt;▪️ vendor screening&lt;br&gt;
▪️ repository evidence review&lt;br&gt;
▪️ technical due diligence&lt;br&gt;
▪️ pre-procurement / pre-pilot checks&lt;br&gt;
▪️ reviewer-ready audit artifacts&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;the-goal-is-simple-&quot;&gt;The goal is simple:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;not more trust language,&lt;br&gt;
but more inspectable evidence surfaces.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;stem-bio-ai-resources-&quot;&gt;STEM BIO-AI resources:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GitHub repository:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/flamehaven01/STEM-BIO-AI&quot;&gt;https://github.com/flamehaven01/STEM-BIO-AI&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Live demo:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://huggingface.co/spaces/Flamehaven/stem-bio-ai&quot;&gt;https://huggingface.co/spaces/Flamehaven/stem-bio-ai&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Technical notes:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/flamehaven01/series/37552&quot;&gt;https://dev.to/flamehaven01/series/37552&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Case study:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven.space/writing/i-audited-10-open-source-bio-ai-repos-most-could-produce-outputs-few-could-establish-trust/&quot;&gt;https://flamehaven.space/writing/i-audited-10-open-source-bio-ai-repos-most-could-produce-outputs-few-could-establish-trust/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Launches</category>
<guid isPermaLink="true">https://coderlegion.com/16773/stem-bio-ai-trust-bio-audit-framework</guid>
<pubDate>Tue, 05 May 2026 16:29:15 +0000</pubDate>
</item>
<item>
<title>How Do You Trust the AI Auditor? STEM-AI v1.1.2 and Memory-Contracted Bio-AI Audits</title>
<link>https://coderlegion.com/16068/how-do-you-trust-the-ai-auditor-stem-ai-v1-1-2-and-memory-contracted-bio-ai-audits</link>
<description>&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1fj5kfblnvz80fjttvnl.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Previous article:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/flamehaven01/how-auditing-10-bio-ai-repositories-shaped-stem-ai-41b5&quot;&gt;&lt;strong&gt;How Auditing 10 Bio-AI Repositories Shaped STEM-AI&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the first STEM-AI write-up, I described what happened after auditing 10 open-source bio/medical AI repositories.&lt;/p&gt;
&lt;p&gt;The important lesson was not just that some repositories lacked clinical disclaimers, tests, or governance artifacts.&lt;/p&gt;
&lt;p&gt;The more useful lesson was this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Text-only review is too weak for bio/medical AI. You have to inspect the code path.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That worked.&lt;/p&gt;
&lt;p&gt;But it exposed the next problem.&lt;/p&gt;
&lt;p&gt;If an AI system is auditing another AI or bioinformatics repository, how do you trust the auditor?&lt;/p&gt;
&lt;p&gt;LLMs drift. &lt;br&gt;
One session can enforce a clinical boundary strictly. &lt;br&gt;
Another can invent a generous middle score for the same boundary case. In normal software review, that is annoying. In medical AI governance, it is a liability.&lt;/p&gt;
&lt;p&gt;STEM-AI v1.1.2 is my answer to that problem.&lt;/p&gt;
&lt;p&gt;It does not try to make the LLM deterministic by writing a longer prompt.&lt;/p&gt;
&lt;p&gt;It binds the audit to a memory contract.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-v1-1-2-adds&quot;&gt;What v1.1.2 adds&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcsghndeq1guwwkoy2y7.png&quot; alt=&quot;standard audit vs Bio/Medical AI audit&quot;&gt;&lt;/p&gt;
&lt;p&gt;STEM-AI v1.1.2 introduces &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/flamehaven01/series/37087&quot;&gt;MICA: Memory-Injected Contract Architecture&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The idea is simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;before the auditor reads the target repository, it must load a fixed audit contract and self-check the rules it is not allowed to bend.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The v1.1.2 layer includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;memory/mica.yaml&lt;/code&gt; -- composition contract&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memory/stem-ai.mica.v1.1.2.json&lt;/code&gt; -- machine-checkable memory archive&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memory/stem-ai-playbook.v1.1.2.md&lt;/code&gt; -- session playbook and drift guard&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memory/stem-ai-lessons.v1.1.2.md&lt;/code&gt; -- historical failure-mode archive&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec/STEM-AI_v1.1.2_CORE.md&lt;/code&gt; -- canonical audit spec&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The contract pins 18 invariants.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stage order is fixed: README intent, cross-platform evidence, code/bio evidence.&lt;/li&gt;
&lt;li&gt;Stage weights are fixed.&lt;/li&gt;
&lt;li&gt;Tier boundaries are fixed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;T0_HARD_FLOOR&lt;/code&gt; cannot be bypassed.&lt;/li&gt;
&lt;li&gt;Stage 2 may use external evidence or Stage 2R repo-local consistency in LOCAL_ANALYSIS mode.&lt;/li&gt;
&lt;li&gt;Governance overlay cannot raise the formal base tier.&lt;/li&gt;
&lt;li&gt;C1-C4 code-integrity checks only run in LOCAL_ANALYSIS mode.&lt;/li&gt;
&lt;li&gt;Mandatory clinical-use disclaimers cannot be omitted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not a claim that the LLM becomes perfectly deterministic.&lt;/p&gt;
&lt;p&gt;It is a narrower claim:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;The auditor is forced to operate inside a contract whose scoring rules, hard floors, and evidence requirements are inspectable.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the useful layer.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-loading-the-contract-means&quot;&gt;What &quot;loading the contract&quot; means&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lo9k78n4gct6xfq15ls2.png&quot; alt=&quot;Forcing the auditor to operate inside a machine-checkable memory contract&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/flamehaven01/series/37087&quot;&gt;MICA&lt;/a&gt;&lt;/strong&gt; is not hidden model memory.&lt;/p&gt;
&lt;p&gt;It is also not a claim that the model provider changed the LLM.&lt;/p&gt;
&lt;p&gt;In v1.1.2, &quot;loading the contract&quot; means the audit session starts by reading a fixed set of repository files before it is allowed to score the target:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;memory/mica.yaml
memory/stem-ai.mica.v1.1.2.json
memory/stem-ai-playbook.v1.1.2.md
memory/stem-ai-lessons.v1.1.2.md
spec/STEM-AI_v1.1.2_CORE.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cucfrq4bst2cxc3olb1d.png&quot; alt=&quot;Pinning the audit rules mathematically&quot;&gt;&lt;/p&gt;
&lt;p&gt;The auditor then performs a pre-execution contract test:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;confirm the canonical spec exists&lt;/li&gt;
&lt;li&gt;confirm the memory archive exists&lt;/li&gt;
&lt;li&gt;confirm the invariant count is 18&lt;/li&gt;
&lt;li&gt;confirm the fixed tier boundaries are present&lt;/li&gt;
&lt;li&gt;confirm the Stage 2 / Stage 2R lane rule is present&lt;/li&gt;
&lt;li&gt;confirm Stage 3G cannot raise the formal tier&lt;/li&gt;
&lt;li&gt;confirm C1-C4 mode gating is active&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only after that does the audit proceed.&lt;/p&gt;
&lt;p&gt;This does not make the LLM mathematically deterministic.&lt;/p&gt;
&lt;p&gt;It makes the audit procedure file-backed, inspectable, and interruptible. If the session cannot load or reconcile the contract files, the correct behavior is to stop before scoring.&lt;/p&gt;
&lt;p&gt;That is the difference between &lt;strong&gt;&quot;please be consistent&quot;&lt;/strong&gt; and &lt;strong&gt;&quot;execute this versioned contract.&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-audit-workflow&quot;&gt;The audit workflow&lt;/h3&gt;
&lt;p&gt;STEM-AI v1.1.2 runs as a structured audit workflow:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rihb9k729ll3vbqpvu3c.png&quot; alt=&quot;STEM-AI v1.1.2 workflow&quot;&gt;&lt;/p&gt;
&lt;p&gt;In LOCAL_ANALYSIS mode, the auditor is not limited to what the README says.&lt;/p&gt;
&lt;p&gt;It can inspect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;package metadata&lt;/li&gt;
&lt;li&gt;workflow files&lt;/li&gt;
&lt;li&gt;test definitions&lt;/li&gt;
&lt;li&gt;dependency manifests&lt;/li&gt;
&lt;li&gt;source-code paths&lt;/li&gt;
&lt;li&gt;deprecated or dead-code paths&lt;/li&gt;
&lt;li&gt;exception handling&lt;/li&gt;
&lt;li&gt;credential patterns&lt;/li&gt;
&lt;li&gt;provenance and hash-checking logic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The output is intentionally split into two files:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;report.md                  # human-readable audit judgment
experiment_results.json    # machine-readable evidence and score object
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5kvqqnty1q4d011wcyo6.png&quot; alt=&quot;Separating subjective reasoning from verifiable mathematics&quot;&gt;&lt;/p&gt;
&lt;p&gt;That split matters.&lt;/p&gt;
&lt;p&gt;The report explains the reasoning.&lt;/p&gt;
&lt;p&gt;The JSON lets another reviewer inspect the score, evidence fields, flags, and integrity checks without trusting the prose.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-real-target-audit-not-a-synthetic-example&quot;&gt;A real target audit, not a synthetic example&lt;/h3&gt;
&lt;p&gt;For this v1.1.2 demonstration, I used a real public repository:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/artic-network/fieldbioinformatics&quot;&gt;artic-network/fieldbioinformatics&lt;br&gt;
&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The target is not the protagonist of this post.&lt;/p&gt;
&lt;p&gt;It is only the specimen used to show the audit workflow against a real bioinformatics codebase.&lt;/p&gt;
&lt;p&gt;The local audit produced:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;audits/fieldbioinformatics_v1_1_2/report.md
audits/fieldbioinformatics_v1_1_2/experiment_results.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The target snapshot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;name&quot;: &quot;artic-network/fieldbioinformatics&quot;,
  &quot;remote&quot;: &quot;https://github.com/artic-network/fieldbioinformatics&quot;,
  &quot;branch&quot;: &quot;master&quot;,
  &quot;commit&quot;: &quot;8008b4c97c2193a82308ff6f0be507b1d9306e36&quot;,
  &quot;file_count&quot;: 114
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is the important part: the audit did not ask, &quot;Does this README sound trustworthy?&quot;&lt;/p&gt;
&lt;p&gt;It asked:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do README claims match actual package metadata and entry points?&lt;/li&gt;
&lt;li&gt;Are there real CI and domain-specific tests?&lt;/li&gt;
&lt;li&gt;Are dependencies reproducible enough?&lt;/li&gt;
&lt;li&gt;Are there credential leaks?&lt;/li&gt;
&lt;li&gt;Are there deprecated patient-adjacent paths?&lt;/li&gt;
&lt;li&gt;Do clinical-adjacent output paths fail closed?&lt;/li&gt;
&lt;li&gt;Does the repository include governance evidence, or only governance absence?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is where STEM-AI is useful.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-score-object&quot;&gt;The score object&lt;/h3&gt;
&lt;p&gt;The machine-readable result records the score like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;stage_1_readme_intent&quot;: 65,
  &quot;stage_2_cross_platform&quot;: null,
  &quot;stage_2_repo_local_consistency&quot;: 75,
  &quot;stage_2_lane&quot;: &quot;STAGE_2R_REPO_LOCAL_CONSISTENCY&quot;,
  &quot;stage_2_policy&quot;: &quot;External Stage 2 was not collected; LOCAL_ANALYSIS used Stage 2R in the fixed 0.20 Stage 2 slot.&quot;,
  &quot;stage_3_code_bio&quot;: 55,
  &quot;weights&quot;: {
    &quot;stage_1&quot;: 0.4,
    &quot;stage_2&quot;: 0.2,
    &quot;stage_3&quot;: 0.4
  },
  &quot;risk_penalty&quot;: 0,
  &quot;final_score&quot;: 63,
  &quot;formal_tier&quot;: &quot;T2 Caution&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;External Stage 2 is explicitly represented as &lt;code&gt;null&lt;/code&gt; for this local-only audit.&lt;/p&gt;
&lt;p&gt;That does not mean cross-platform consistency is unimportant.&lt;/p&gt;
&lt;p&gt;It means this evidence slice was deliberately scoped to LOCAL_ANALYSIS. Instead of pretending to have social/web evidence, v1.1.2 uses Stage 2R: Repo-Local Consistency.&lt;/p&gt;
&lt;p&gt;Stage 2R asks whether the repository's own surfaces agree with each other:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;README vs package metadata and CLI entry points&lt;/li&gt;
&lt;li&gt;README vs docs, tutorials, and troubleshooting&lt;/li&gt;
&lt;li&gt;README test claims vs CI workflow and test definitions&lt;/li&gt;
&lt;li&gt;clinical-adjacent outputs vs local intended-use boundaries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The contract defines the fixed-weight calculation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Final = (Stage 1 x 0.40) + (Stage 2R x 0.20) + (Stage 3 x 0.40) - Risk Penalty
      = (65 x 0.40) + (75 x 0.20) + (55 x 0.40) - 0
      = 63
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The final tier is therefore:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;T2 Caution
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not because the prose sounded balanced.&lt;/p&gt;
&lt;p&gt;Because the contract math forces that result.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-the-t0-hard-floor-did-not-trigger&quot;&gt;Why the T0 hard floor did not trigger&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xdntp9d5l6yysb9sbndw.png&quot; alt=&quot;Why the T0 hard floor did not trigger&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;T0_HARD_FLOOR&lt;/code&gt; is the rule that prevents a clinically dangerous repository from escaping rejection through good wording.&lt;/p&gt;
&lt;p&gt;In simplified form:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;If a repository is CA-DIRECT
and it has no substantive code implementation,
then final tier = T0 regardless of score math.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Examples of CA-DIRECT include patient-specific diagnosis, treatment recommendation, triage, risk scoring, or clinical decision support.&lt;/p&gt;
&lt;p&gt;The audited repository did not trigger that floor because STEM-AI classified it as:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;clinical_adjacent&quot;: true,
  &quot;ca_severity&quot;: &quot;CA-INDIRECT&quot;,
  &quot;t0_hard_floor&quot;: false
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It produces biological sequence artifacts that may sit near public-health or clinical workflows, but the inspected surface did not make direct autonomous diagnosis or treatment claims. It also has substantive implementation, CI, and domain-specific test definitions.&lt;/p&gt;
&lt;p&gt;So the result is not T0.&lt;/p&gt;
&lt;p&gt;But it is also not high-trust.&lt;/p&gt;
&lt;p&gt;The bounded result is T2 Caution.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t3o3nr2j7trtap0med4y.png&quot; alt=&quot;Stem-AI Audit v1.1.2&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;code-integrity-findings&quot;&gt;Code-integrity findings&lt;/h3&gt;
&lt;p&gt;The same JSON records C1-C4 LOCAL_ANALYSIS checks:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;C1_hardcoded_credentials&quot;: {
    &quot;status&quot;: &quot;PASS&quot;
  },
  &quot;C2_dependency_pinning&quot;: {
    &quot;status&quot;: &quot;WARN&quot;
  },
  &quot;C3_dead_or_deprecated_patient_adjacent_paths&quot;: {
    &quot;status&quot;: &quot;WARN&quot;
  },
  &quot;C4_exception_handling_clinical_adjacent_paths&quot;: {
    &quot;status&quot;: &quot;WARN&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is the difference between a general review and a code-path audit.&lt;/p&gt;
&lt;p&gt;A text review can say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The project appears technically mature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A code-path audit can say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Credential patterns were checked. Dependency pinning is weak. Deprecated patient-adjacent metadata exists. One clinical-adjacent filtering path does not fail closed on missing depth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is a more useful governance object.&lt;/p&gt;
&lt;p&gt;It is not a certificate.&lt;/p&gt;
&lt;p&gt;It is a map of what a reviewer should trust, distrust, or inspect next.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-small-python-verifier&quot;&gt;A small Python verifier&lt;/h3&gt;
&lt;p&gt;Here is a small dependency-free Python script that reads the actual audit JSON and verifies the score calculation. It does not need target private code or patient data; it only checks the machine-readable audit result.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;#!/usr/bin/env python3
import json
from pathlib import Path


RESULT = Path(&quot;audits/fieldbioinformatics_v1_1_2/experiment_results.json&quot;)


def tier(score: int) -&amp;gt; str:
    if score &amp;lt;= 39:
        return &quot;T0&quot;
    if score &amp;lt;= 54:
        return &quot;T1&quot;
    if score &amp;lt;= 69:
        return &quot;T2&quot;
    if score &amp;lt;= 84:
        return &quot;T3&quot;
    return &quot;T4&quot;


def bar(score: int, width: int = 20) -&amp;gt; str:
    filled = round((score / 100) * width)
    return &quot;█&quot; * filled + &quot;░&quot; * (width - filled)


data = json.loads(RESULT.read_text(encoding=&quot;utf-8&quot;))
score = data[&quot;score&quot;]

stage_1 = score[&quot;stage_1_readme_intent&quot;]
stage_2 = score.get(&quot;stage_2_repo_local_consistency&quot;)
stage_3 = score[&quot;stage_3_code_bio&quot;]
risk_penalty = score[&quot;risk_penalty&quot;]

weights = score[&quot;weights&quot;]
computed = round(
    (stage_1 * weights[&quot;stage_1&quot;])
    + (stage_2 * weights[&quot;stage_2&quot;])
    + (stage_3 * weights[&quot;stage_3&quot;])
    - risk_penalty
)

assert computed == score[&quot;final_score&quot;]
assert tier(computed) in score[&quot;formal_tier&quot;]

print(f&quot;Stage 1  {stage_1:3}/100  {bar(stage_1)}&quot;)
print(f&quot;Stage 2R {stage_2:3}/100  {bar(stage_2)}&quot;)
print(f&quot;Stage 3  {stage_3:3}/100  {bar(stage_3)}&quot;)
print(f&quot;Final    {computed:3}/100  {bar(computed)}&quot;)
print(f&quot;Tier     {score['formal_tier']}&quot;)

for key, item in data[&quot;code_integrity&quot;].items():
    print(f&quot;{key}: {item['status']}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Expected digest:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Stage 1   65/100  █████████████░░░░░░░
Stage 2R  75/100  ███████████████░░░░░
Stage 3   55/100  ███████████░░░░░░░░░
Final     63/100  █████████████░░░░░░░
Tier      T2 Caution
C1_hardcoded_credentials: PASS
C2_dependency_pinning: WARN
C3_dead_or_deprecated_patient_adjacent_paths: WARN
C4_exception_handling_clinical_adjacent_paths: WARN
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;why-this-matters&quot;&gt;Why this matters&lt;/h3&gt;
&lt;p&gt;Bio/medical AI governance is full of language that sounds safe but is hard to verify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;research use only&quot;&lt;/li&gt;
&lt;li&gt;&quot;not medical advice&quot;&lt;/li&gt;
&lt;li&gt;&quot;validated pipeline&quot;&lt;/li&gt;
&lt;li&gt;&quot;clinical-grade&quot;&lt;/li&gt;
&lt;li&gt;&quot;responsible AI&quot;&lt;/li&gt;
&lt;li&gt;&quot;human-in-the-loop&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those phrases are not enough.&lt;/p&gt;
&lt;p&gt;STEM-AI asks for observable structure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;source-code reality&lt;/li&gt;
&lt;li&gt;test reality&lt;/li&gt;
&lt;li&gt;CI reality&lt;/li&gt;
&lt;li&gt;dependency reality&lt;/li&gt;
&lt;li&gt;clinical boundary reality&lt;/li&gt;
&lt;li&gt;governance artifact reality&lt;/li&gt;
&lt;li&gt;code-integrity reality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;v1.1.2 adds another layer:&lt;/p&gt;
&lt;p&gt;auditor reality.&lt;/p&gt;
&lt;p&gt;The AI auditor itself has to load a memory contract before it scores.&lt;/p&gt;
&lt;p&gt;That is what MICA is for.&lt;/p&gt;
&lt;p&gt;The final answer is T2 Caution: research reference and supervised non-clinical technical review only. No autonomous clinical decision support.&lt;/p&gt;
&lt;p&gt;Not hype.&lt;/p&gt;
&lt;p&gt;Not rejection by default.&lt;/p&gt;
&lt;p&gt;A bounded trust judgment with evidence paths.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-comes-next&quot;&gt;What comes next&lt;/h3&gt;
&lt;p&gt;The follow-on lane should:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;provision the target dependency environment&lt;/li&gt;
&lt;li&gt;run selected target tests in a controlled shell&lt;/li&gt;
&lt;li&gt;capture command, exit code, environment hash, and output digest&lt;/li&gt;
&lt;li&gt;attach a replay manifest to &lt;code&gt;experiment_results.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;keep runtime evidence separate from source/document/CI evidence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the current demonstration, runtime execution status is recorded as an evidence boundary in the audit JSON. The score itself remains based on the official v1.1.2 LOCAL_ANALYSIS evidence basis: Stage 1 source/README evidence, Stage 2R repo-local consistency, Stage 3 code/bio evidence, and C1-C4 integrity checks.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0wo50wt3x5bfg8xrip3.png&quot; alt=&quot;Stem-AI&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;final-thought-3&quot;&gt;Final thought&lt;/h3&gt;
&lt;p&gt;STEM-AI is &lt;strong&gt;not a clinical certifier.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It is also &lt;strong&gt;not trying to replace scientific review, regulatory review, or domain experts.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Its role is narrower: &lt;strong&gt;make the governance conversation start from observable evidence instead of presentation quality.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In practice, that means asking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What did the repository claim?&lt;/li&gt;
&lt;li&gt;What does the code actually implement?&lt;/li&gt;
&lt;li&gt;Do the local surfaces agree with each other?&lt;/li&gt;
&lt;li&gt;Are the tests domain-specific or merely infrastructural?&lt;/li&gt;
&lt;li&gt;Are clinical-adjacent boundaries explicit?&lt;/li&gt;
&lt;li&gt;Can the auditor's own scoring logic be inspected?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is where I think STEM-AI belongs in AI governance.&lt;/p&gt;
&lt;p&gt;Not as the final authority.&lt;/p&gt;
&lt;p&gt;As the evidence gate before authority is invoked.&lt;/p&gt;
&lt;p&gt;It turns a vague question, &quot;Do we trust this bio/medical AI repository?&quot;, into a more reviewable one:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Does this repository establish enough observable trust to be considered, contained, or rejected?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/16068/how-do-you-trust-the-ai-auditor-stem-ai-v1-1-2-and-memory-contracted-bio-ai-audits</guid>
<pubDate>Tue, 28 Apr 2026 13:52:59 +0000</pubDate>
</item>
<item>
<title>When an AI Pipeline Passes — But One Path Still Must Be Held: EXP-034</title>
<link>https://coderlegion.com/15972/when-an-ai-pipeline-passes-but-one-path-still-must-be-held-exp-034</link>
<description>&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;No efficacy, causal, or clinical claims are made in this report.&lt;/em&gt;&lt;br&gt;
RExSyn is an experimental Bio-AI governance pipeline.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You do not need to know the earlier experiments to read this report.&lt;/p&gt;
&lt;p&gt;Most AI pipeline reports ask one question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Did the system pass?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EXP-034 asked a stricter one:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which path was allowed to count?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That distinction matters.&lt;/p&gt;
&lt;p&gt;In a multi-stage AI pipeline, a final &lt;code&gt;PASS&lt;/code&gt; can hide a lot of unresolved risk. A branch may be unstable. A regeneration path may drift. A new external API may enter the chain without being governed. A new modality may appear to improve the system while quietly changing the basis of judgment.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gt7hho1hqvwps2xp0m9p.png&quot; alt=&quot;The real result&quot;&gt;&lt;/p&gt;
&lt;p&gt;So EXP-034 was not designed to produce a clean success story.&lt;/p&gt;
&lt;p&gt;It was designed to separate three things:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Path &lt;/th&gt;&lt;th&gt;Status &lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Anchored expansion path &lt;/td&gt;&lt;td&gt;&lt;code&gt;GO&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Accepted path for EXP-034 reporting&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Current regeneration path &lt;/td&gt;&lt;td&gt;&lt;code&gt;HOLD&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Diagnostic evidence, not acceptance baseline&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Next remediation cycle &lt;/td&gt;&lt;td&gt;&lt;code&gt;EXP-035&lt;/code&gt; &lt;/td&gt;&lt;td&gt;RCA and repair target&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That is the real result.&lt;/p&gt;
&lt;p&gt;EXP-034 passed, but not because every path passed.&lt;/p&gt;
&lt;p&gt;It passed because the accepted anchor remained stable, the expansion tracks did not break the judgment system, and the unresolved regeneration path was explicitly held instead of being silently mixed into acceptance.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-exp-034-tested&quot;&gt;What EXP-034 tested&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ve4hb86wepyckegmtdfz.png&quot; alt=&quot;Locking the Boundary&quot;&gt;&lt;/p&gt;
&lt;p&gt;EXP-033 had already established a parity baseline.&lt;/p&gt;
&lt;p&gt;EXP-034 asked whether that baseline could survive controlled expansion while adding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a modal update track,&lt;/li&gt;
&lt;li&gt;a live AlphaFold EBI observer endpoint,&lt;/li&gt;
&lt;li&gt;and AlphaGenome / AG measurement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The operating rule was simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reproduce the parity baseline first.&lt;/li&gt;
&lt;li&gt;Only then allow expansion.&lt;/li&gt;
&lt;li&gt;Only then compare governance behavior across experiment cycles.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the parity anchor breaks, the rest is not expansion.&lt;/p&gt;
&lt;p&gt;It is regression.&lt;/p&gt;
&lt;p&gt;The scope was also locked: methodology, governance, and reproducibility only. The experiment did not claim biological efficacy, causal inference, or clinical recommendation.&lt;/p&gt;
&lt;p&gt;That boundary is important because this kind of system can easily sound more powerful than what was actually measured. EXP-034 was not asking whether the pipeline discovered a better biological answer.&lt;/p&gt;
&lt;p&gt;It was asking whether the judgment system stayed governable after new signals entered the chain.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-key-split-pass-did-not-mean-everything-passed&quot;&gt;The key split: PASS did not mean everything passed&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tsjcpcij1hext56s3s1b.png&quot; alt=&quot;The key split&quot;&gt;&lt;/p&gt;
&lt;p&gt;Track-A produced the defining decision of the experiment.&lt;/p&gt;
&lt;p&gt;The accepted legacy replay anchor preserved the required PASS/BLOCK separation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Metric &lt;/th&gt;&lt;th&gt;Legacy replay anchor&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;sample accuracy &lt;/td&gt;&lt;td&gt;&lt;code&gt;1.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;sample balanced accuracy &lt;/td&gt;&lt;td&gt;&lt;code&gt;1.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;arm accuracy &lt;/td&gt;&lt;td&gt;&lt;code&gt;1.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;arm balanced accuracy &lt;/td&gt;&lt;td&gt;&lt;code&gt;1.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dangerous false-pass rate &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;false reject rate &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That was the path allowed to anchor EXP-034.&lt;/p&gt;
&lt;p&gt;But the current regeneration path did not recover:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Metric &lt;/th&gt;&lt;th&gt;Current regeneration&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;sample accuracy &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.5&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;sample balanced accuracy &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.5&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;status &lt;/td&gt;&lt;td&gt;&lt;code&gt;HOLD&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is the most important part of the experiment:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EXP-034 did not pretend the regeneration path passed.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It kept that result inside the experiment as diagnostic evidence, but did not allow it to redefine the accepted baseline.&lt;/p&gt;
&lt;p&gt;That separation is not a minor operational detail. It is the governance result.&lt;/p&gt;
&lt;p&gt;A weak pipeline would have blended the two paths and still reported a final success. EXP-034 did the opposite. It allowed the stable anchor to proceed and held the unstable path for RCA.&lt;/p&gt;
&lt;p&gt;That is how a stage-gated system avoids changing its own question after seeing the result.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-path-splitting-matters&quot;&gt;Why path splitting matters&lt;/h3&gt;
&lt;p&gt;The concrete governance problem is this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A pipeline can pass for the wrong reason.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;valid_report = stable_anchor × traceable_extension × contained_instability
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the anchor is not stable, the report cannot be trusted.&lt;/p&gt;
&lt;p&gt;If the extension is not traceable, the new signal becomes an ungoverned side channel.&lt;/p&gt;
&lt;p&gt;If instability is not contained, a diagnostic failure can quietly contaminate acceptance.&lt;/p&gt;
&lt;p&gt;A single final &lt;code&gt;PASS&lt;/code&gt; is not enough when several branches contribute to a verdict. You need to know which branch produced the accepted decision, which branch failed, which branch was only diagnostic, and which branch is allowed to affect future work.&lt;/p&gt;
&lt;p&gt;EXP-034 passed because all three conditions were enforced:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the legacy replay anchor held,&lt;/li&gt;
&lt;li&gt;the new observer and AG paths were measured under governance,&lt;/li&gt;
&lt;li&gt;and the regeneration HOLD remained outside acceptance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the difference between a pipeline that merely outputs a verdict and a pipeline that controls which verdicts are allowed to count.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;adding-alphafold-ebi-as-an-observer-not-a-predictor&quot;&gt;Adding AlphaFold EBI as an observer, not a predictor&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/703iwj95lg12xjdtdgw9.png&quot; alt=&quot;Controlled Expansion&quot;&gt;&lt;/p&gt;
&lt;p&gt;Relative to EXP-033, EXP-034 added a live AlphaFold Protein Structure Database / EBI observer line.&lt;/p&gt;
&lt;p&gt;This was not promoted into a primary predictor.&lt;/p&gt;
&lt;p&gt;It was wired as an observer/reference oracle and traced into governance as &lt;code&gt;ebi_g2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The result:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Check &lt;/th&gt;&lt;th&gt;Result&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;AlphaFold EBI direct endpoint for &lt;code&gt;P23219&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;GO&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Stage 7 observer tests &lt;/td&gt;&lt;td&gt;&lt;code&gt;2 passed&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ebi_g2&lt;/code&gt; governance traceability &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;BLOCKED_IDP&lt;/code&gt; mapping path &lt;/td&gt;&lt;td&gt;validated in test&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The point is not simply that an external endpoint responded.&lt;/p&gt;
&lt;p&gt;The point is that the external signal entered the system through a governed path. It was not allowed to float beside the pipeline as informal context.&lt;/p&gt;
&lt;p&gt;EXP-034 tested whether the new observer could be admitted without becoming an ungoverned side channel.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;ag-live-non-degradation-not-repair&quot;&gt;AG-live: non-degradation, not repair&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/add3dcaw37lha9ua1zch.png&quot; alt=&quot;AG-live: non-degradation, not repair&quot;&gt;&lt;/p&gt;
&lt;p&gt;Track-C tested a simple question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If AG-live enters the pipeline, does it change the final decision?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The answer was no.&lt;/p&gt;
&lt;p&gt;AG-live did enter the pipeline.&lt;/p&gt;
&lt;p&gt;The AlphaGenome field was present with:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;AG field &lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;source &lt;/td&gt;&lt;td&gt;&lt;code&gt;alphagenome_api_live&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;pathogenicity_score &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.5&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;confidence &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.7143&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;clinical_significance &lt;/td&gt;&lt;td&gt;&lt;code&gt;uncertain&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These are sanitized branch artifact values, not implementation code or full raw artifacts.&lt;/p&gt;
&lt;p&gt;AG-live did not change classification.&lt;/p&gt;
&lt;p&gt;Both controls remained governed by the same conservative decision boundary:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Path &lt;/th&gt;&lt;th&gt;Expected &lt;/th&gt;&lt;th&gt;Observed &lt;/th&gt;&lt;th&gt;Interpretation&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;EXP032-BLOCK-001&lt;/code&gt; negative control &lt;/td&gt;&lt;td&gt;&lt;code&gt;BLOCK_EXPECTED&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;BLOCK / ESCALATE&lt;/code&gt; &lt;/td&gt;&lt;td&gt;fail-closed behavior preserved&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;EXP032-PASS-001&lt;/code&gt; pass-eligible control &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS_ELIGIBLE&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;BLOCK / ESCALATE&lt;/code&gt; &lt;/td&gt;&lt;td&gt;conservative over-blocking persisted&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That is the key nuance.&lt;/p&gt;
&lt;p&gt;AG-live did not create a dangerous false-pass. The negative control stayed blocked.&lt;/p&gt;
&lt;p&gt;But AG-live also did not repair the current regeneration hold. The pass-eligible control still failed to recover and remained blocked under &lt;code&gt;R2_component_floor&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The governance surface moved slightly, but the verdict did not:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Metric &lt;/th&gt;&lt;th&gt;Earlier AG branch &lt;/th&gt;&lt;th&gt;AG-live branch&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;p_e2e&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.0912&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.0947&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;clinical status &lt;/td&gt;&lt;td&gt;&lt;code&gt;BLOCK&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;BLOCK&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;rule &lt;/td&gt;&lt;td&gt;&lt;code&gt;R2_component_floor&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;R2_component_floor&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;So the correct conclusion is not:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;AG improved the pipeline.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The correct conclusion is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;AG-live changed the measurement surface slightly, but did not change the decision boundary.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is exactly what non-degradation means here.&lt;/p&gt;
&lt;p&gt;It preserved fail-closed behavior on the negative control while leaving the pass-eligible control over-blocked.&lt;/p&gt;
&lt;p&gt;This is why Track-C can only be called non-degradation, not repair.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;contract-passed-but-governance-still-blocked&quot;&gt;Contract passed, but governance still blocked&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/clbqwjvytk3ql600icp1.png&quot; alt=&quot;Contract passed, but governance still blocked&quot;&gt;&lt;/p&gt;
&lt;p&gt;One of the most useful details in EXP-034 is that the contract layer and governance layer did not collapse into one verdict.&lt;/p&gt;
&lt;p&gt;The contract inspection reported:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Field &lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;pipeline contract score &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.9077&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;weakest connection &lt;/td&gt;&lt;td&gt;&lt;code&gt;C2&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dangerous pass risk &lt;/td&gt;&lt;td&gt;&lt;code&gt;0.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;gate recommendation &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;overall OK &lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;But the clinical governance layer still blocked the case.&lt;/p&gt;
&lt;p&gt;That is not a contradiction.&lt;/p&gt;
&lt;p&gt;It means the pipeline connection was valid enough to inspect, but the decision was not safe enough to accept.&lt;/p&gt;
&lt;p&gt;This distinction matters.&lt;/p&gt;
&lt;p&gt;A weaker system might treat a passing contract as permission to pass the whole output. EXP-034 did not do that. It allowed the contract layer to say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The pipeline is connected.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;while the governance layer could still say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The claim should not pass.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That separation is exactly what a governance layer is supposed to preserve.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;cross-cycle-comparison-exp-032-exp-033-exp-034&quot;&gt;Cross-cycle comparison: EXP-032 → EXP-033 → EXP-034&lt;/h3&gt;
&lt;p&gt;Track-D compared the accepted anchor path across cycles.&lt;/p&gt;
&lt;p&gt;You do not need the earlier experiments as background. They matter here for one reason only:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EXP-034 was not allowed to invent a new success criterion.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EXP-032 and EXP-033 provided the previous PASS/BLOCK baseline. EXP-034 tested whether that baseline survived expansion.&lt;/p&gt;
&lt;p&gt;The classification baseline stayed fixed:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Compare &lt;/th&gt;&lt;th&gt;Accuracy / balanced accuracy&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;EXP-032 → EXP-034 &lt;/td&gt;&lt;td&gt;&lt;code&gt;1.0 / 1.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;EXP-033 → EXP-034 &lt;/td&gt;&lt;td&gt;&lt;code&gt;1.0 / 1.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;At the same time, governance signals moved:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Governance signal &lt;/th&gt;&lt;th&gt;Delta&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ccge_p_e2e_mean&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;+0.04447488775996111&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nnsl_sr9_tech_mean&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;+0.04692394788063081&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nnsl_di2_tech_mean&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;-0.03667940951579321&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The interpretation is narrow:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The judgment baseline stayed fixed while the governance surface became more measurable.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is what EXP-034 was allowed to claim.&lt;/p&gt;
&lt;p&gt;It did not prove biological efficacy.&lt;/p&gt;
&lt;p&gt;It did not prove that every branch of the system was now stable.&lt;/p&gt;
&lt;p&gt;It proved that controlled expansion could happen without breaking the accepted PASS/BLOCK baseline.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stage-gate-result&quot;&gt;Stage-gate result&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yt0jedqsq4ivhh5du6an.png&quot; alt=&quot;Cross-cycle comparison&quot;&gt;&lt;/p&gt;
&lt;p&gt;EXP-034 ended with all five stage gates passing:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Gate &lt;/th&gt;&lt;th&gt;Status&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;G1 parity &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;G2 reproducibility &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;G3 cross-experiment compare &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;G4 governance traceability &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;G5 extension safety &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Final state:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Field &lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;overall status &lt;/td&gt;&lt;td&gt;&lt;code&gt;PASS&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;anchor mode &lt;/td&gt;&lt;td&gt;&lt;code&gt;legacy_replay&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;first failed gate &lt;/td&gt;&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;diagnostic hold &lt;/td&gt;&lt;td&gt;&lt;code&gt;Track-A current regeneration&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is the important nuance:&lt;/p&gt;
&lt;p&gt;The experiment passed with a retained diagnostic hold.&lt;/p&gt;
&lt;p&gt;That is not a contradiction. It is the point of the control system.&lt;/p&gt;
&lt;p&gt;The accepted anchor path was allowed to proceed. The current regeneration path was not. The remediation target was moved to EXP-035.&lt;/p&gt;
&lt;p&gt;That separation is the actual proof EXP-034 provides: not that every branch became stable, but that instability was not allowed to contaminate acceptance.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-exp-034-actually-showed&quot;&gt;What EXP-034 actually showed&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/69c63nfb2kt1gso8awp2.png&quot; alt=&quot;What EXP-034 actually showed&quot;&gt;&lt;/p&gt;
&lt;p&gt;EXP-034 did not show that the entire pipeline is now stable.&lt;/p&gt;
&lt;p&gt;It showed something narrower and more useful:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A method-locked Bio-AI governance pipeline can admit modal expansion, AlphaFold EBI observer wiring, and AG-live measurement without losing its accepted PASS/BLOCK baseline — while keeping the unstable regeneration path out of acceptance.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Track-C sharpened that conclusion.&lt;/p&gt;
&lt;p&gt;AG-live entered.&lt;br&gt;
Metrics moved slightly.&lt;br&gt;
The verdict did not change.&lt;br&gt;
Dangerous false-pass did not appear.&lt;br&gt;
Conservative over-blocking remained.&lt;/p&gt;
&lt;p&gt;That is not a clean success story.&lt;/p&gt;
&lt;p&gt;It is a governed result.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;closing&quot;&gt;Closing&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rj4k1d45y6vyolfgksu.png&quot; alt=&quot;The Mark of a Mature AI Pipeline&quot;&gt;&lt;/p&gt;
&lt;p&gt;Stage-gated experimentation is not just about getting a result.&lt;/p&gt;
&lt;p&gt;It is about deciding whether the result should be allowed to exist.&lt;/p&gt;
&lt;p&gt;In EXP-034, the answer was:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;GO   for the anchored expansion path
HOLD for current regeneration
NEXT for EXP-035 remediation
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That may sound less dramatic than a clean success story.&lt;/p&gt;
&lt;p&gt;But in governance work, that is exactly the point.&lt;/p&gt;
&lt;p&gt;A mature AI pipeline is not the one that claims everything passed.&lt;/p&gt;
&lt;p&gt;It is the one that can say:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This path passed.&lt;br&gt;
This path did not.&lt;br&gt;
And we did not mix them.&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15972/when-an-ai-pipeline-passes-but-one-path-still-must-be-held-exp-034</guid>
<pubDate>Mon, 27 Apr 2026 10:23:06 +0000</pubDate>
</item>
<item>
<title>How Auditing 10 Bio-AI Repositories Shaped STEM-AI (Trust Evaluator for Medical AI Artifact)</title>
<link>https://coderlegion.com/13699/how-auditing-10-bio-ai-repositories-shaped-stem-ai-trust-evaluator-for-medical-ai-artifact</link>
<description>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Reading path:&lt;/strong&gt;&lt;br&gt;
This post is part of a series. &lt;br&gt;
(1) &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/flamehaven01/medical-ai-repositories-need-more-than-benchmarks-we-built-stem-ai-to-audit-trust-194f&quot;&gt;STEM-AI introduction&lt;/a&gt; — what the framework is and why we built it&lt;br&gt;
(2) &lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven.space/writing/bio-ai-repository-audit-2026-a-technical-report-on-10-open-source-systems/&quot;&gt;Technical audit report&lt;/a&gt; — full findings across 10 repositories&lt;br&gt;
(3) &lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven.space/writing/i-audited-10-open-source-bio-ai-repos-most-could-produce-outputs-few-could-establish-trust/&quot;&gt;Narrative summary&lt;/a&gt; — what those findings actually mean&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-text-could-see-and-what-code-revealed&quot;&gt;&lt;strong&gt;What Text Could See — and What Code Revealed&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/avblcoe473uege82hbwl.png&quot; alt=&quot;what text could see&quot;&gt;&lt;/p&gt;
&lt;p&gt;In March 2026, we ran STEM-AI against 10 high-visibility open-source bio/medical AI repositories.&lt;/p&gt;
&lt;p&gt;The framework did what it was designed to do. It surfaced missing disclaimers, absent CI, weak reproducibility signals, and public-facing governance gaps. Those findings mattered, and the scores were directionally right.&lt;/p&gt;
&lt;p&gt;But when we reviewed the audits more carefully, one pattern kept appearing: some of the most consequential failures were not visible in the artifact surface at all. They only became obvious when we looked directly at the code.&lt;/p&gt;
&lt;p&gt;This function lives inside a repository presented as an AI-driven drug discovery workflow.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def generate_analogues(self, seed_smiles: str, count: int = 3):
    &quot;&quot;&quot;
    Mocks a generative model (like REINVENT).
    In a real app, this would call a PyTorch model.
    &quot;&quot;&quot;
    # Simple string manipulation for demo purposes
    analogues = []
    for i in range(count):
        if &quot;C&quot; in seed_smiles:
            new_smi = seed_smiles.replace(&quot;C&quot;, &quot;C(C)&quot;, 1) if i == 0 else seed_smiles + &quot;F&quot;
            analogues.append(new_smi)
        else:
            analogues.append(seed_smiles + &quot;C&quot;)
    return analogues
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It does not generate molecules. It appends characters.&lt;/p&gt;
&lt;p&gt;SMILES (Simplified Molecular Input Line Entry System) is a strict notation for molecular structure. A valid SMILES string encodes real geometry and bonding. Appending C produces a syntactically valid string that represents no real compound. The function runs without error, returns a list, and the pipeline continues downstream.&lt;/p&gt;
&lt;p&gt;Our framework scored this repository T0. Correctly. But not because it saw this function.&lt;/p&gt;
&lt;p&gt;It scored T0 because the README was missing disclaimers. The CI was absent. Reproducibility was undocumented. Text-path evaluation is designed to measure exactly that. It did.&lt;/p&gt;
&lt;p&gt;The audit result was correct. The evidence surface had room to go deeper.&lt;/p&gt;
&lt;p&gt;Running the audits showed us what code-path evaluation could add on top.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-code-access-makes-visible&quot;&gt;&lt;strong&gt;What Code Access Makes Visible&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hefzdhoiz8nakmrf3959.png&quot; alt=&quot;What Code Access Makes Visible&quot;&gt;&lt;/p&gt;
&lt;p&gt;The drug discovery example was not unusual.&lt;/p&gt;
&lt;p&gt;CellAgent's pipeline ends with this call:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# main.py, line 153
final_result = planner.generate_final_result(results)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The method exists. Its body is &lt;code&gt;pass&lt;/code&gt;. The pipeline completes without error and produces nothing. A text audit reading the README would have no way to know this.&lt;/p&gt;
&lt;p&gt;BioAgents includes a rate limiter for external API calls:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-tsx&quot;&gt;// rateLimiter.ts, lines 62-68
if (process.env.USE_JOB_QUEUE === 'true') {
    await this.rateLimiter.consume(userId);
} else {
    // Job queue disabled - skip rate limiting for direct calls
    return next();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;USE_JOB_QUEUE&lt;/code&gt; defaults to &lt;code&gt;false&lt;/code&gt; in &lt;code&gt;.env.example&lt;/code&gt;. Every default deployment has rate limiting disabled. The function name implies protection. In default operation, there is none.&lt;/p&gt;
&lt;p&gt;The pattern across all three:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the code looks governed.&lt;/li&gt;
&lt;li&gt;the behavior tells a different story.&lt;/li&gt;
&lt;li&gt;That story is only visible when you read the code.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Text scores and code behavior can diverge. Knowing where and how they diverge is the next layer of evidence worth capturing.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;four-directions-the-audits-opened&quot;&gt;Four Directions the Audits Opened&lt;/h3&gt;
&lt;p&gt;Reviewing all ten audits, we identified four areas where code-path evaluation could extend what text auditing already does well.&lt;/p&gt;
&lt;h4 id=&quot;direction-1-clinical-exposure-is-visible-in-imports-not-just-in-readme-text-&quot;&gt;Direction 1: Clinical exposure is visible in imports, not just in README text.&lt;/h4&gt;
&lt;p&gt;A repository importing pharmacogenomics allele tables has clinical exposure regardless of what its README says. Detecting that dependency at the import level — rather than waiting for a disclaimer — lets the framework flag exposure earlier.&lt;/p&gt;
&lt;p&gt;The key distinction is severity: a direct pharmacogenomics import (&lt;code&gt;CYP2D6&lt;/code&gt;, &lt;code&gt;CPIC&lt;/code&gt;) signals live patient-facing risk and is classified CA-DIRECT.&lt;/p&gt;
&lt;p&gt;A general-purpose medical imaging library like &lt;code&gt;pydicom&lt;/code&gt; or MONAI is classified CA-INDIRECT — research-use exposure, not necessarily a live clinical output path. The import alone does not determine clinical risk; the classification tier does.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;direction-2-not-all-clinical-proximity-is-the-same-&quot;&gt;Direction 2: Not all clinical proximity is the same.&lt;/h4&gt;
&lt;p&gt;A live pharmacogenomics dosage tool and a README roadmap note about a future ClinVar integration are not equivalent risks. Differentiating them — live output vs. research context vs. planned feature — makes the evaluation more precise and makes the accountability expectations more appropriate.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;direction-3-scoring-stability-is-worth-measuring-directly-&quot;&gt;Direction 3: Scoring stability is worth measuring directly.&lt;/h4&gt;
&lt;p&gt;We ran Stage 1 on one repository in multiple passes. The results ranged across 28 points on the same input. Overlapping trigger conditions between hype-detection items are one contributing factor.&lt;/p&gt;
&lt;p&gt;LLM runtime stochasticity is another — the exact split between the two is still under measurement. Adding explicit discrimination examples — what exact phrasing triggers each item, what does not — makes the scoring surface cleaner and reduces the most obvious sources of variance.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;direction-4-code-path-behavior-deserves-its-own-scan-layer-&quot;&gt;Direction 4: Code-path behavior deserves its own scan layer.&lt;/h4&gt;
&lt;p&gt;A fail-open pattern is a control path that appears to enforce a constraint but defaults to bypassing it. The BioAgents rate limiter above is the example. In a clinical output path, a silent pass-through is not graceful degradation. It is an untraced result that looks like a real one. Building a dedicated scan for these patterns adds a check that text auditing was never meant to provide.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;These four directions came directly from running the audits. The scores across the 10 repositories remain as published. Code-path evaluation is what the framework can now add on top of them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-v1-0-6-added-carried-forward-in-v1-1-2&quot;&gt;&lt;strong&gt;What v1.0.6 Added — Carried Forward in v1.1.2&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;These changes were introduced in v1.0.6 and are carried forward in the current internal v1.1.2 package. They extend the framework's evidence surface into code-level behavior. Calibration is ongoing.&lt;/p&gt;
&lt;h4 id=&quot;1-two-evidence-paths-not-one&quot;&gt;1. Two Evidence Paths, Not One&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bkol0yxx1ht5r0svy5yk.png&quot; alt=&quot;Two Evidence Paths, Not One&quot;&gt;&lt;/p&gt;
&lt;p&gt;We narrowed one of the biggest divergence points by splitting evaluation into a text path and a code path.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;text path&lt;/strong&gt; works as before: read the README, CHANGELOG, and public posts, score against the rubric. Always available regardless of access to the repository.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;code path&lt;/strong&gt; activates when the audit has a local clone. It runs through Claude Code, Codex CLI, Gemini CLI, or Copilot CLI. Claims are not interpreted. They are measured. A README that says &quot;IRB-approved data&quot; earns no points for the statement. Points require a provenance artifact in the code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When code confirms the README, that is a positive signal. When it contradicts it, that contradiction is the finding.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;2-clinical-dependency-detection&quot;&gt;2. Clinical Dependency Detection&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qbakbfbq74n5vp5d2rig.png&quot; alt=&quot;Clinical Dependency Detection&quot;&gt;&lt;/p&gt;
&lt;p&gt;At the start of every local audit, a scan script reads Python imports and README keywords. It classifies the result into one of three severity levels:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# ca_detection_scan.sh -- pharmacogenomics section

# CA-DIRECT: live patient-facing output risk
check_import &quot;CPIC|cpic|PharmGx|pharmacogenomic&quot; \\
  &quot;Pharmacogenomics (CPIC/PharmGx)&quot; &quot;CA-DIRECT&quot;

check_import &quot;DPYD|CYP2D6|CYP2C19|allele&quot; \\
  &quot;Pharmacogene alleles&quot; &quot;CA-DIRECT&quot;

# CA-INDIRECT: research-use clinical exposure
check_import &quot;import pydicom|from pydicom&quot; \\
  &quot;pydicom (DICOM imaging)&quot; &quot;CA-INDIRECT&quot;

check_import &quot;import monai|from monai&quot; \\
  &quot;MONAI (medical AI)&quot; &quot;CA-INDIRECT&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Accountability requirements follow the actual clinical proximity of the code. Not the aspirational proximity of the roadmap. A roadmap mention without active implementation is treated as CA-PLANNED rather than collapsed into the same bucket as live clinical output.&lt;/p&gt;
&lt;p&gt;The pattern matching is against import statements and function names, not comment text. False positive calibration is still in progress.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-code-integrity-scanning-c1-c4-&quot;&gt;3. Code Integrity Scanning (C1-C4)&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d69g7synh94iizuciqpy.png&quot; alt=&quot;Code Integrity Scanning (C1-C4)&quot;&gt;&lt;/p&gt;
&lt;p&gt;A second scan handles four code-level checks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hardcoded credentials (C1)&lt;/li&gt;
&lt;li&gt;unpinned dependencies (C2)&lt;/li&gt;
&lt;li&gt;clinical-path stubs (C3)&lt;/li&gt;
&lt;li&gt;fail-open exception handlers (C4).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The C4 check targets the BioAgents-style pattern. Searching for clinical keywords on the &lt;code&gt;except:&lt;/code&gt; line misses most real cases. Clinical context lives in function names and surrounding code. The scan uses a two-pass approach: first identify files with clinical-domain context, then find silent exception handlers within those files.&lt;/p&gt;
&lt;p&gt;A silent &lt;code&gt;except: pass&lt;/code&gt; in a clinical-context file is a trust-surface failure. The scan makes it visible without requiring a reviewer to read every exception block manually.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;4-discrimination-examples&quot;&gt;4. Discrimination Examples&lt;/h4&gt;
&lt;p&gt;To reduce the 28-point variance, we added explicit examples for each hype-detection item: what exact phrasing triggers it, what does not, and what the documented edge cases are.&lt;/p&gt;
&lt;p&gt;The goal is to reduce obvious scoring drift enough that the same repository is no longer interpreted as two different trust surfaces across different auditors or different LLMs. That goal is not yet verified. The discrimination examples are the primary mechanism toward it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-three-questions-now-have-a-fourth&quot;&gt;&lt;strong&gt;The Three Questions Now Have a Fourth&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;In the first post, we described three questions the framework was built around:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Did the repository describe its limits honestly?Did public communication remain consistent with those limits?Did the codebase show evidence of maintenance and biological responsibility?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Running 10 real audits pointed toward a fourth:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;4. Does the code actually do what the documentation says — and where it diverges, is that divergence visible and traceable?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That fourth question is what the audit outputs kept surfacing. A function name that sounds real. A pipeline that looks complete. An output that is plausible. An implementation that is a stub, or a control path that silently bypasses its own constraint.&lt;/p&gt;
&lt;p&gt;The first three questions can be answered by reading. The fourth requires looking at the code.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-framework-added-and-what-stays-the-same&quot;&gt;&lt;strong&gt;What the Framework Added — and What Stays the Same&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The first post ended with this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&quot;STEM-AI is meant to support serious review, not replace it.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That has not changed. Every report carries a non-removable disclaimer: LLM-generated audit, not a regulatory determination, not clinical certification. Every report carries an expiry date. The minimum threshold for supervised pilot consideration is still T3. None of the March 2026 repositories reached it.&lt;/p&gt;
&lt;p&gt;What the audits added is narrower — broader evidence coverage on top of an already-working foundation:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8yoxv47netm2tmf881xg.png&quot; alt=&quot;What the Framework Added — and What Stays the Same&quot;&gt;&lt;/p&gt;
&lt;p&gt;A verifiable artifact shifts the accountability surface — it does not eliminate the possibility of falsification. The framework treats its presence as a necessary condition, not a sufficient one.&lt;/p&gt;
&lt;p&gt;What the framework gained is that the evidence it counts now extends beyond what authors say about their own code.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;three-directions-still-ahead&quot;&gt;&lt;strong&gt;Three Directions Still Ahead&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lvbbl6bgo1z79mrg7wgr.png&quot; alt=&quot;Three Directions Still Ahead&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automated re-audit on repository changes.&lt;/strong&gt; A score from three months ago may not describe the same repository. The trajectory signal measures issue close rate and release frequency across consecutive 90-day windows. It is a partial answer. A CI-triggered re-audit path is the logical next step.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The denominator problem.&lt;/strong&gt; Zero of 10 repositories reached T3. This may accurately describe the ecosystem's current state. It may also reflect calibration issues in the upper tiers. Distinguishing between the two requires before-and-after auditing of repositories that have received systematic governance remediation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Stage 2 redistribution question.&lt;/strong&gt; Most audits have no cross-platform consistency data. When that data is unavailable, the framework redistributes Stage 2's weight equally between documentation quality and engineering accountability.&lt;/p&gt;
&lt;p&gt;For repositories with clinical-direct exposure, a well-written README can then compensate for weak code accountability. A guardrail flags this condition. The current redistribution rule is explicit but not yet final — it remains one of the framework's open calibration questions.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;&lt;p&gt;If there are open-source bio-AI repositories you think should be &amp;gt;audited next, drop them in the comments. Bonus if they claim clinical &amp;gt;relevance, drug discovery, or medical reasoning.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;STEM-AI v1.1.2 — Trust Evaluation Framework for Medical AI Repositories.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&quot;Code works. But does the author care about the patient?&quot;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13699/how-auditing-10-bio-ai-repositories-shaped-stem-ai-trust-evaluator-for-medical-ai-artifact</guid>
<pubDate>Mon, 30 Mar 2026 12:12:10 +0000</pubDate>
</item>
<item>
<title>Open Bio-AI Has a Trust Problem, Not Just a Model Problem</title>
<link>https://coderlegion.com/13500/open-bio-ai-has-a-trust-problem-not-just-a-model-problem</link>
<description>&lt;p&gt;Drug discovery is expensive for a reason.&lt;/p&gt;
&lt;p&gt;A new medicine can take roughly a decade and enormous capital to move from idea to patient. That is not simply because biology is complex. It is because biology punishes unverified claims. Every stage adds cost, but it also adds filtering. Weak hypotheses are supposed to fail early. Unsafe assumptions are supposed to be caught before they travel downstream.&lt;/p&gt;
&lt;p&gt;That is why AI in biology is so attractive.&lt;/p&gt;
&lt;p&gt;If models can surface candidate molecules faster, detect patterns in genomic data earlier, or automate parts of scientific analysis that used to take weeks, the upside is obvious. The promise is real. Faster iteration matters.&lt;/p&gt;
&lt;p&gt;But over the past year, another layer has formed around that promise.&lt;/p&gt;
&lt;p&gt;A visible class of open-source repositories now presents Bio-AI through agents, skills, wrappers, workflow kits, and automated research surfaces. They look increasingly operational. They install cleanly. They return outputs. They often present themselves in the language of discovery.&lt;/p&gt;
&lt;p&gt;That was the background to the question I wanted to answer.&lt;/p&gt;
&lt;p&gt;Not: &lt;strong&gt;Which repositories look the smartest?&lt;/strong&gt;&lt;br&gt;
Not even: &lt;strong&gt;Which ones are scientifically correct?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A prior question comes first.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Which of these systems provide enough structural honesty, bounded&lt;br&gt;
behavior, and verification surface that someone downstream could begin&lt;br&gt;
to trust what they are doing?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I audited ten visible repositories and adjacent scientific automation systems in the open Bio-AI ecosystem.&lt;/p&gt;
&lt;p&gt;What I found was not that most of them were obviously fraudulent, or even obviously wrong. The deeper problem was narrower and more important:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;most of them had outputs, but lacked reliable mechanisms to establish&lt;br&gt;
what those outputs meant, when they should stop, or how another party&lt;br&gt;
would review them before acting on them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is not just a tooling gap.&lt;/p&gt;
&lt;p&gt;It is a trust gap.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-function-that-changed-the-entire-audit&quot;&gt;The Function That Changed the Entire Audit&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!q2p_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3ef2fc-6e82-448a-b091-f4eb753b13ad_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;One of the clearest examples came from a repository called OpenClaw-Medical-Skills, presented as part of a drug-discovery workflow.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def generate_analogues(self, seed_smiles: str, count: int = 3):
    “”“
    Mocks a generative model (like REINVENT).
    In a real app, this would call a PyTorch model.
    “”“
    analogues = []
    for i in range(count):
        if “C” in seed_smiles:
            new_smi = seed_smiles.replace(”C”, “C(C)”, 1) if i == 0 else seed_smiles + “F”
            analogues.append(new_smi)
        else:
            analogues.append(seed_smiles + “C”)
    return analogues
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you work in chemistry, the issue is immediate.&lt;/p&gt;
&lt;p&gt;If you do not, the short version is simple: SMILES is not arbitrary text. It is a structured notation for molecular representations, with grammar, branching rules, ring closures, charge handling, and chemical constraints. This function does not generate meaningful analogues. It appends characters to a string.&lt;/p&gt;
&lt;p&gt;The comment admits it is a mock. But that truth lives inside the code comment, not at the trust surface most users or downstream agents would rely on. At the level of the workflow, the repository still appears to generate candidate molecules. The function runs. The pipeline continues. A result is returned.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!QLqo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26c33c99-c9ee-48b6-9404-3931e8105286_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;By the time the system says “candidate molecules generated,” the operational distinction between mock behavior and scientific behavior has already been blurred.&lt;/p&gt;
&lt;p&gt;That is why I do not think this is best described as a bug.&lt;/p&gt;
&lt;p&gt;It is &lt;strong&gt;a trust-surface failure.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And once I saw that clearly, I started finding related versions of the same problem across the ecosystem.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-audited&quot;&gt;What I Audited&lt;/h3&gt;
&lt;p&gt;I reviewed ten visible repositories and adjacent systems using a two-layer process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a repository audit focused on structure, execution paths, default behavior, and file-level findings&lt;/li&gt;
&lt;li&gt;a trust-scoring framework, STEM-AI v1.0.4, focused on documentation integrity, governance posture, and biological accountability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The repositories were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Biomni&lt;/li&gt;
&lt;li&gt;AI-Scientist&lt;/li&gt;
&lt;li&gt;CellAgent&lt;/li&gt;
&lt;li&gt;ClawBio&lt;/li&gt;
&lt;li&gt;LabClaw&lt;/li&gt;
&lt;li&gt;claude-scientific-skills&lt;/li&gt;
&lt;li&gt;SciAgent-Skills&lt;/li&gt;
&lt;li&gt;BioAgents&lt;/li&gt;
&lt;li&gt;BioClaw&lt;/li&gt;
&lt;li&gt;OpenClaw-Medical-Skills&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!1vlG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc839a2b8-5b28-4c28-9fc6-859235997a0f_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The score table looked like this:&lt;br&gt;
&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!rfwJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd741581-2eed-48b2-a354-a19c70898793_761x479.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The headline result was blunt.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8 of 10 landed in T0&lt;/li&gt;
&lt;li&gt;1 landed in T1&lt;/li&gt;
&lt;li&gt;1 landed in T2&lt;/li&gt;
&lt;li&gt;0 reached T3 or T4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That matters because, in this framework, T3 is the minimum threshold for supervised pilot consideration.&lt;/p&gt;
&lt;p&gt;None of the repositories reached it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-this-audit-was-actually-measuring&quot;&gt;What This Audit Was Actually Measuring&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!OGO2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d10507-48e7-4f0a-a1bc-c1c581ccfb8e_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;This point matters because the article can be misread if the frame is too loose.&lt;/p&gt;
&lt;p&gt;The audit was not trying to prove which repositories were scientifically true in the strongest sense. It was asking a prior and narrower question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Does this repository provide enough structural evidence, boundedness,&lt;br&gt;
and reviewability that a researcher, team, or institution could even&lt;br&gt;
begin to establish trust before downstream use?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That means asking questions such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the README honestly describe what the system can and cannot do?&lt;/li&gt;
&lt;li&gt;Do critical paths fail closed when required evidence, assets, or dependencies are missing?&lt;/li&gt;
&lt;li&gt;Are there domain tests, not just software hygiene tests?&lt;/li&gt;
&lt;li&gt;Can an output be traced back to a concrete input and execution state?&lt;/li&gt;
&lt;li&gt;Are placeholders, stubs, or mock routines clearly separated from functional output surfaces?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a narrower standard than scientific truth.&lt;/p&gt;
&lt;p&gt;But in practice it comes first.&lt;/p&gt;
&lt;p&gt;If a system cannot establish what it did, then no downstream user can responsibly decide what its output should mean.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;four-patterns-kept-reappearing&quot;&gt;Four Patterns Kept Reappearing&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!Iw_I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ff32d25-8bd6-4166-ab4e-8fe0cf522248_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;After working through the repositories, the same four failure modes appeared again and again.&lt;/p&gt;
&lt;h4 id=&quot;1-scientific-scope-expanded-faster-than-accountability&quot;&gt;1. Scientific Scope Expanded Faster Than Accountability&lt;/h4&gt;
&lt;p&gt;Many of the repositories touched domains that are not trivial: drug discovery, molecular analysis, genomics, clinical-adjacent interpretation, or biologically consequential workflow automation.&lt;/p&gt;
&lt;p&gt;But the surrounding accountability structure often lagged far behind the ambition of the task.&lt;/p&gt;
&lt;p&gt;The closer a system gets to outputs that influence costly, safety-relevant, or clinically adjacent decisions, the more necessary it becomes to define limits, disclaimers, stop conditions, review boundaries, and responsibility surfaces.&lt;/p&gt;
&lt;p&gt;Those were often weak, partial, or absent.&lt;/p&gt;
&lt;h4 id=&quot;2-ci-checked-form-not-scientific-validity&quot;&gt;2. CI Checked Form, Not Scientific Validity&lt;/h4&gt;
&lt;p&gt;Several repositories had CI/CD pipelines, which sounds reassuring until you inspect what they actually verify.&lt;/p&gt;
&lt;p&gt;In most cases, the checks focused on formatting, schema shape, ordering, script completion, or basic code hygiene. Those things matter. But they do not answer the question that matters in Bio-AI: whether the output is scientifically meaningful, biologically plausible, or safe to interpret as evidence.&lt;/p&gt;
&lt;p&gt;Passing CI often meant the software surface was consistent.&lt;/p&gt;
&lt;p&gt;It did not mean the scientific surface was trustworthy.&lt;/p&gt;
&lt;h4 id=&quot;3-mock-behavior-could-survive-as-functional-behavior&quot;&gt;3. Mock Behavior Could Survive as Functional Behavior&lt;/h4&gt;
&lt;p&gt;The OpenClaw example was the clearest case, but not the only one.&lt;/p&gt;
&lt;p&gt;Across the sample, I repeatedly found a dangerous pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the name of the function sounded real&lt;/li&gt;
&lt;li&gt;the workflow looked legitimate&lt;/li&gt;
&lt;li&gt;the output format appeared plausible&lt;/li&gt;
&lt;li&gt;but the underlying behavior was placeholder logic, a simplified stub, or a mock presented too close to a user-facing surface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prototype code is not the problem by itself. Early repositories mock things all the time.&lt;/p&gt;
&lt;p&gt;The problem begins when the architecture no longer makes that provisional status obvious downstream.&lt;/p&gt;
&lt;p&gt;At that point, scaffolding can start masquerading as capability.&lt;/p&gt;
&lt;h4 id=&quot;4-strong-design-was-often-undermined-by-weak-defaults&quot;&gt;4. Strong Design Was Often Undermined by Weak Defaults&lt;/h4&gt;
&lt;p&gt;Several repositories were not superficially sloppy. Some had serious architecture. Some clearly reflected thoughtful engineering.&lt;/p&gt;
&lt;p&gt;But the defaults weakened the trust story.&lt;/p&gt;
&lt;p&gt;BioAgents presented a substantial multi-agent design, yet rate limiting could fall away in default usage. BioClaw used container isolation, but an important writable mount weakened containment. Biomni wrapped parts of execution in timeout logic, yet still exposed unsandboxed subprocess behavior.&lt;/p&gt;
&lt;p&gt;This produced a recurring pattern I now think is characteristic of immature scientific infrastructure:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the architecture says the right things, but the runtime defaults still carry the old risks.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-one-repository-that-broke-the-pattern&quot;&gt;The One Repository That Broke the Pattern&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!hOQ6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ac55b9d-afca-4192-956c-7081dd9db99f_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The only real outlier in the sample was ClawBio.&lt;/p&gt;
&lt;p&gt;It did not solve everything. It still landed at T2, not T3 or T4. But it was the only repository in the set that consistently treated trust as something that had to be constructed in the runtime itself.&lt;/p&gt;
&lt;p&gt;Two signals stood out.&lt;/p&gt;
&lt;p&gt;First, it validated biological inputs before moving forward. Its scRNA-seq path did not simply accept a file and continue. It checked whether the data looked already processed, whether value assumptions were broken, and whether the analysis should halt rather than continue under uncertain conditions.&lt;/p&gt;
&lt;p&gt;Second, it created reproducible audit identifiers by hashing input files. That sounds mundane. It is not. It creates a deterministic link between a specific input state and a specific output trace — exactly the kind of provenance discipline that was missing almost everywhere else in the sample.&lt;/p&gt;
&lt;p&gt;ClawBio did not prove that open-source Bio-AI is solved.&lt;/p&gt;
&lt;p&gt;It did prove something narrower and more useful:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the ecosystem does not have to remain trapped at the level of plausible-looking but weakly governed execution.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-changed-in-my-view&quot;&gt;What Changed in My View&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!Duf1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7725bfb0-091c-457e-b91a-e24a21b47283_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Before this audit, the intuitive question was:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which Bio-AI repositories are good?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After the audit, I think that is the wrong first question.&lt;/p&gt;
&lt;p&gt;The better first question is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What has to exist before any Bio-AI repository can be treated as trustworthy scientific infrastructure?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That shift matters because it moves the conversation away from surface cleverness and toward institutional reviewability.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From capability to boundedness.&lt;/li&gt;
&lt;li&gt;From output to provenance.&lt;/li&gt;
&lt;li&gt;From demo quality to stop conditions.&lt;/li&gt;
&lt;li&gt;From architectural ambition to governance reality.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why I do not think the core bottleneck in Bio-AI is model capability alone.&lt;/p&gt;
&lt;p&gt;The deeper bottleneck is the missing verification layer.&lt;/p&gt;
&lt;p&gt;More specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;truth-surface separation&lt;/li&gt;
&lt;li&gt;fail-closed runtime behavior&lt;/li&gt;
&lt;li&gt;domain regression testing&lt;/li&gt;
&lt;li&gt;provenance discipline&lt;/li&gt;
&lt;li&gt;explicit scope boundaries&lt;/li&gt;
&lt;li&gt;human-in-command reviewability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without those, even technically impressive repositories remain unstable objects: too promising to dismiss, too weakly governed to trust.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-minimum-standard-i-would-use&quot;&gt;The Minimum Standard I Would Use&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!jckm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418f187c-19a9-45f8-b804-34248b3ae7ad_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;If I were evaluating these systems for institutional use, I would not begin with benchmark claims or abstract model quality.&lt;/p&gt;
&lt;p&gt;I would begin with six simpler questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What can this repository actually do locally?&lt;/li&gt;
&lt;li&gt;What depends on hidden assets, hosted services, or private APIs?&lt;/li&gt;
&lt;li&gt;Does it stop when critical evidence is missing?&lt;/li&gt;
&lt;li&gt;Does it include domain-specific tests?&lt;/li&gt;
&lt;li&gt;Can outputs be traced to concrete inputs and execution paths?&lt;/li&gt;
&lt;li&gt;Is the trust surface honest?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Those are not glamorous questions.&lt;/p&gt;
&lt;p&gt;They are earlier questions.&lt;/p&gt;
&lt;p&gt;And in this audit, they mattered more than almost anything the READMEs claimed.&lt;/p&gt;
&lt;p&gt;My own threshold would be clear:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T3 is the minimum standard for a supervised pilot.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;None of the repositories in this audit reached it.&lt;/p&gt;
&lt;p&gt;That is not a reason to stop building.&lt;/p&gt;
&lt;p&gt;It is a reason to stop pretending that plausible output is already equivalent to trustworthy infrastructure.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-point&quot;&gt;Final Point&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://substackcdn.com/image/fetch/$s_!dyYE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ddb06f9-7e0f-4b21-b687-5791014796b7_1834x1024.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;I do think AI will matter in biology.&lt;/p&gt;
&lt;p&gt;The promise is not fake. The acceleration is not imaginary. Some of these repositories are useful research artifacts, engineering accelerators, or idea surfaces.&lt;/p&gt;
&lt;p&gt;But the field is still crossing a deeper line than many people admit.&lt;/p&gt;
&lt;p&gt;It is not just trying to produce outputs.&lt;/p&gt;
&lt;p&gt;It is trying to produce outputs that another party can review, bound, reproduce, and challenge before those outputs acquire scientific or operational authority.&lt;/p&gt;
&lt;p&gt;That is the line that still matters most.&lt;/p&gt;
&lt;p&gt;And right now, in open Bio-AI, the verification layer is still lagging behind the capability layer.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;&lt;h3 id=&quot;bio-ai-repository-audit-2026-technical-report&quot;&gt;Bio-AI Repository Audit 2026 — Technical Report&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;A technical audit of 10 open-source Bio-AI repositories using code inspection and STEM-AI trust scoring.&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;Audit snapshot date: March 20, 2026. STEM-AI v1.0.4.&lt;br&gt;
This report reflects a time-bounded audit of public repository surfaces, workflow reconstruction, and selective file-level review.&lt;br&gt;
It is not a regulatory determination or legal judgment.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;→ Read the Full Technical Report&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven.space/writing/bio-ai-repository-audit-2026-a-technical-report-on-10-open-source-systems/&quot;&gt;https://flamehaven.space/writing/bio-ai-repository-audit-2026-a-technical-report-on-10-open-source-systems/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Audit snapshot date: March 20, 2026. STEM-AI v1.0.4. This article reflects a time-bounded audit of public repository surfaces, workflow reconstruction, and selective file-level review. It is not a regulatory determination or legal judgment.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13500/open-bio-ai-has-a-trust-problem-not-just-a-model-problem</guid>
<pubDate>Thu, 26 Mar 2026 06:32:45 +0000</pubDate>
</item>
<item>
<title>I Audited 10 Open-Source Bio-AI Repos. Most Could Produce Outputs. Few Could Establish Trust.</title>
<link>https://coderlegion.com/13485/i-audited-10-open-source-bio-ai-repos-most-could-produce-outputs-few-could-establish-trust</link>
<description>&lt;h3 id=&quot;not-which-tools-were-good-whether-any-of-them-could-prove-what-they-were-doing-&quot;&gt;&lt;strong&gt;Not which tools were “good.” Whether any of them could prove what they were doing.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Drug development is slow for a reason.&lt;/p&gt;
&lt;p&gt;A single new medicine can take roughly ten years and more than a billion dollars to reach a patient. That is not because biology is under-optimized. It is because biology does not forgive guesses.&lt;/p&gt;
&lt;p&gt;Every step has to be verified. Every claim has to be traced. When something goes wrong at the wrong stage, people get hurt.&lt;/p&gt;
&lt;p&gt;The promise of AI in drug discovery is that it can compress those timelines. Find molecular candidates faster. Surface patterns in genomic data that humans would miss. Run analyses in hours that would otherwise take months.&lt;/p&gt;
&lt;p&gt;That promise is real.&lt;/p&gt;
&lt;p&gt;But over the past year, something else has been happening alongside it. A growing number of open-source repositories have appeared on GitHub presenting AI systems for drug discovery, genomic analysis, and clinical-adjacent biological research. They look sophisticated. They run without errors. They produce plausible-sounding output.&lt;/p&gt;
&lt;p&gt;The question I wanted answered was not whether they looked impressive.&lt;/p&gt;
&lt;p&gt;It was whether they could establish what their outputs actually meant.&lt;/p&gt;
&lt;p&gt;So I audited ten high-visibility repositories and adjacent systems in the open Bio-AI ecosystem. What I found was not that most of them were obviously wrong. It was that most of them had no structural way to know whether they were right or wrong, and no reliable way to tell the user either.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-function-that-changed-the-way-i-see-this-space&quot;&gt;The Function That Changed the Way I See This Space&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*sQmEhtsmrGDDu2IBtlJb6A.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Here is a piece of code from a repository called &lt;strong&gt;OpenClaw-Medical-Skills&lt;/strong&gt;, presented as part of a drug-discovery workflow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def generate_analogues(self, seed_smiles: str, count: int = 3):
 &quot;&quot;&quot;
 Mocks a generative model (like REINVENT).
 In a real app, this would call a PyTorch model.
 &quot;&quot;&quot;
 analogues = []
 for i in range(count):
 if &quot;C&quot; in seed_smiles:
 new_smi = seed_smiles.replace(&quot;C&quot;, &quot;C(C)&quot;, 1) if i == 0 else seed_smiles + &quot;F&quot;
 analogues.append(new_smi)
 else:
 analogues.append(seed_smiles + &quot;C&quot;)
 return analogues
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are a chemist, you already know why this is a problem.&lt;/p&gt;
&lt;p&gt;If you are not, here is the short version.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SMILES&lt;/code&gt; is a strict string notation for molecular structures. A valid SMILES string is not just text. It has grammar: bond types, atom charges, ring closures, branching rules. This function does not generate molecules. It appends the letter &lt;code&gt;”C”&lt;/code&gt; or &lt;code&gt;”F”&lt;/code&gt; to the input string.&lt;/p&gt;
&lt;p&gt;The docstring admits that this is a mock. But that disclosure appears in a code comment, not in the user-facing skill surface. The researcher or AI agent reading the corresponding skill document sees a workflow that claims to generate candidate molecules.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*DlmRjXgFX1lRwx7ooWArPQ.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The function runs, returns a list, and produces no obvious error. By the time the pipeline says “candidate molecules generated,” the fact that the underlying operation was string manipulation is already hidden.&lt;/p&gt;
&lt;p&gt;This is not just a bug.&lt;/p&gt;
&lt;p&gt;It is &lt;strong&gt;a trust-surface failure.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And once I saw it clearly, I started seeing the same pattern in different forms across the ecosystem.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-audited-1&quot;&gt;&lt;strong&gt;What I Audited&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*5jBNlH-3K3CU28p_s5tw3g.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;I evaluated ten visible repositories and adjacent systems in the Bio-AI ecosystem using a two-layer process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a technical repository audit focused on structure, execution paths, and file-level findings&lt;/li&gt;
&lt;li&gt;a trust-scoring framework called &lt;strong&gt;STEM-AI v1.0.4&lt;/strong&gt;, which measures documentation integrity, governance posture, and biological accountability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*BOdV561BDMj8JW7Vx-fhMQ.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The full score table looked like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*REFwgVz3UDTa7nzbZGX6pw.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8 of 10 landed in T0.&lt;/li&gt;
&lt;li&gt;One reached T1.&lt;/li&gt;
&lt;li&gt;One reached T2.&lt;/li&gt;
&lt;li&gt;None reached T3 or T4.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the headline result.&lt;/p&gt;
&lt;p&gt;But the scores matter less than the reason behind them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-was-actually-measuring&quot;&gt;What I Was Actually Measuring&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*fQzXJpbt5DWBtxypj-hEFw.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;This audit was not trying to answer the question most people ask first.&lt;/p&gt;
&lt;p&gt;It was not asking: &lt;strong&gt;which repositories are scientifically correct?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It was asking a prior question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Does this repository provide enough structural honesty and verification architecture that a researcher or institution could even begin to establish trust before downstream use?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That means checking things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the README honestly describe what the repository can and cannot do?&lt;/li&gt;
&lt;li&gt;Does the code fail closed when required assets or evidence are missing&lt;/li&gt;
&lt;li&gt;Are there domain tests, not just syntax checks?&lt;/li&gt;
&lt;li&gt;Can you trace an output back to a concrete execution state?&lt;/li&gt;
&lt;li&gt;Are mock or placeholder routines presented as if they were functional?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a narrower question than scientific truth, but in practice it comes first. If a system cannot establish what it is doing, it cannot be trusted downstream no matter how impressive its claims are.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;four-patterns-behind-the-failures&quot;&gt;Four Patterns Behind the Failures&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*dUnwLtfUZUG7CJropwEX_w.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;After reviewing the repositories, the same four patterns kept appearing.&lt;/p&gt;
&lt;h4 id=&quot;1-clinical-adjacent-scope-without-clinical-adjacent-accountability&quot;&gt;1. Clinical-Adjacent Scope Without Clinical-Adjacent Accountability&lt;/h4&gt;
&lt;p&gt;Many of these repositories touch domains that are not harmless playgrounds: drug candidates, genomic interpretation, clinical reports, single-cell analysis, molecular design.&lt;/p&gt;
&lt;p&gt;But the code and documentation often behave as if these are neutral productivity tasks. They rarely acknowledge regulatory context, risk boundaries, or the practical consequences of error.&lt;/p&gt;
&lt;h4 id=&quot;2-ci-validates-form-not-science&quot;&gt;2. CI Validates Form, Not Science&lt;/h4&gt;
&lt;p&gt;Several repositories have CI/CD. That sounds reassuring until you look at what the CI actually does.&lt;/p&gt;
&lt;p&gt;In most cases it checks formatting, section order, or whether a script runs without crashing. It does &lt;strong&gt;not&lt;/strong&gt; check whether the biological output is valid, physically plausible, or scientifically appropriate.&lt;/p&gt;
&lt;p&gt;Passing CI in these systems often means only that the software surface is syntactically consistent.&lt;/p&gt;
&lt;h4 id=&quot;3-mock-as-functional&quot;&gt;3. Mock-as-Functional&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*mKX0rSb0nDRS-fvnMsF2GQ.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/FreedomIntelligence/OpenClaw-Medical-Skills&quot;&gt;OpenClaw-Medical-Skills&lt;/a&gt; example is the clearest case, but not the only one.&lt;/p&gt;
&lt;p&gt;Again and again, I found architectures where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the function name sounds real&lt;/li&gt;
&lt;li&gt;the pipeline looks professional&lt;/li&gt;
&lt;li&gt;the output format is plausible&lt;/li&gt;
&lt;li&gt;but the implementation is a stub, a placeholder, or an undeclared simplification&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not the same as ordinary prototype code. Prototype code is usually disclosed as provisional. Mock-as-Functional code is dangerous because it can survive into user-facing workflows while still looking operational.&lt;/p&gt;
&lt;h4 id=&quot;4-strong-architecture-undermined-by-unsafe-defaults&quot;&gt;4. Strong Architecture Undermined by Unsafe Defaults&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*Vuu_krPKlqX-NW-J1sGdrw.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Some of the repositories are not poorly engineered in the shallow sense. They have real structure. They have actual systems architecture.&lt;/p&gt;
&lt;p&gt;But the defaults betray them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/bio-xyz/BioAgents&quot;&gt;BioAgents&lt;/a&gt; is a good example. It has a serious multi-agent platform design, but its rate limiting can disappear in the default mode.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Runchuan-BU/BioClaw&quot;&gt;BioClaw&lt;/a&gt; has container isolation, but one of its important mounts is writable in a way that weakens containment.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/snap-stanford/biomni&quot;&gt;Biomni&lt;/a&gt; has timeout wrappers, but still allows unsandboxed execution through generated subprocesses.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is a recurring pattern: the security story exists, but the runtime defaults hollow it out.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-one-repository-that-broke-the-pattern-1&quot;&gt;The One Repository That Broke the Pattern&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*s0ukyn62_Ul0UBaCADeHCw.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The outlier was &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/ClawBio/ClawBio&quot;&gt;&lt;strong&gt;ClawBio&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was not perfect, but it was the only repository in the sample that treated trust as something that had to be built into the runtime, not just implied by the project description.&lt;/p&gt;
&lt;p&gt;Two things stood out immediately.&lt;/p&gt;
&lt;p&gt;First, it validates biological inputs before analysis. Its scRNA-seq input logic does not simply accept a file because it has the right extension. It checks whether the data appears already processed, whether values are negative, whether integer assumptions have been violated, and whether the analysis should halt before proceeding.&lt;/p&gt;
&lt;p&gt;Second, it generates reproducible audit identifiers by hashing the input files. That is not glamorous, but it is exactly the kind of thing missing almost everywhere else in the ecosystem: a deterministic link between a specific input state and a specific output state.&lt;/p&gt;
&lt;p&gt;ClawBio reached &lt;code&gt;**T2&lt;/code&gt;**, the only repository in the sample to do so. That does not make it deployment-ready. But it does show that open-source Bio-AI does not have to remain trapped at the level of plausible-looking but weakly governed execution.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;&lt;h3 id=&quot;bio-ai-repository-audit-2026-technical-report-1&quot;&gt;Bio-AI Repository Audit 2026 — Technical Report&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Technical Code Audit + STEM-AI Trust Scoring (10 Open-Source Systems)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Audit snapshot date:&lt;/strong&gt; March 20, 2026&lt;br&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; STEM-AI v1.0.4  &lt;/p&gt;
&lt;p&gt;This report reflects a time-bounded audit of public repository&lt;br&gt;
surfaces, workflow reconstruction, and selective file-level review.&lt;br&gt;
It is &lt;strong&gt;not&lt;/strong&gt; a regulatory determination or legal judgment.&lt;/p&gt;
&lt;h4 id=&quot;-read-the-full-technical-report-https-flamehaven-space-writing-bio-ai-repository-audit-2026-a-technical-report-on-10-open-source-systems-&quot;&gt;▶ Read the Full Technical Report &lt;a rel=&quot;nofollow&quot; href=&quot;https://flamehaven.space/writing/bio-ai-repository-audit-2026-a-technical-report-on-10-open-source-systems/&quot;&gt;https://flamehaven.space/writing/bio-ai-repository-audit-2026-a-technical-report-on-10-open-source-systems/&lt;/a&gt;&lt;/h4&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-this-means-1&quot;&gt;What This Means&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*eUUYdmjcvKQtKvQ0h53ILA.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The big lesson from this audit is not that the ecosystem lacks cleverness.&lt;/p&gt;
&lt;p&gt;It is that the ecosystem is much better at producing the appearance of capability than at producing systems that can bound, trace, and justify that capability before downstream use.&lt;/p&gt;
&lt;p&gt;That is why I do not think the core bottleneck in Bio-AI is model quality alone.&lt;/p&gt;
&lt;p&gt;The bottleneck is governance.&lt;/p&gt;
&lt;p&gt;More specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;truth-surface separation&lt;/li&gt;
&lt;li&gt;fail-closed runtime behavior&lt;/li&gt;
&lt;li&gt;domain regression testing&lt;/li&gt;
&lt;li&gt;provenance discipline&lt;/li&gt;
&lt;li&gt;explicit scope boundaries&lt;/li&gt;
&lt;li&gt;human-in-command reviewability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without these, even an impressive repository remains an unstable object: too sophisticated to dismiss casually, too weakly governed to trust.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-minimum-standard-i-would-use-1&quot;&gt;The Minimum Standard I Would Use&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*OMKWIu_1W9uD25tqYXy2QA.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;If I were evaluating these systems for institutional use, I would not begin with benchmark claims.&lt;/p&gt;
&lt;p&gt;I would begin with six questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What can this repository actually do locally?&lt;/li&gt;
&lt;li&gt;What depends on hidden assets, external APIs, or hosted outputs?&lt;/li&gt;
&lt;li&gt;Does it stop when critical evidence is missing?&lt;/li&gt;
&lt;li&gt;Does it have domain-specific tests?&lt;/li&gt;
&lt;li&gt;Can outputs be traced to concrete inputs and execution paths?&lt;/li&gt;
&lt;li&gt;Is the trust surface honest?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In my view, the minimum threshold for a supervised pilot should be &lt;code&gt;**T3&lt;/code&gt;**. None of the repositories in this audit reached it.&lt;/p&gt;
&lt;p&gt;That is not a reason to stop building.&lt;/p&gt;
&lt;p&gt;It is a reason to be honest about where the field actually is.&lt;/p&gt;
&lt;p&gt;These repositories are often valuable as research artifacts, engineering accelerators, or methodology surfaces. But most are not yet trustworthy systems in the stronger sense that medicine, biology, or automated discovery will eventually require.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-point-1&quot;&gt;Final Point&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/896/1*0YaQCnmdd5vblJSTxHdDQg.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The AI-accelerated future of biology is probably real.&lt;/p&gt;
&lt;p&gt;But if that future is going to matter outside demos, preprints, and impressive GitHub surfaces, then the field will have to solve something more basic than capability.&lt;/p&gt;
&lt;p&gt;It will have to solve how to distinguish real outputs from plausible outputs before the cost of being wrong becomes unbearable.&lt;/p&gt;
&lt;p&gt;That, more than any benchmark, is the line the field still has to cross.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Audit snapshot date: March 20, 2026. STEM-AI v1.0.4. This article reflects a time-bounded audit of public repository surfaces, workflow reconstruction, and selective file-level review. It is not a regulatory determination or legal judgment.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13485/i-audited-10-open-source-bio-ai-repos-most-could-produce-outputs-few-could-establish-trust</guid>
<pubDate>Wed, 25 Mar 2026 15:20:11 +0000</pubDate>
</item>
<item>
<title>Medical AI Repositories Need More Than Benchmarks. We Built STEM-AI to Audit Trust</title>
<link>https://coderlegion.com/13429/medical-ai-repositories-need-more-than-benchmarks-we-built-stem-ai-to-audit-trust</link>
<description>&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n54npnrc11jo9gwvkwhk.png&quot; alt=&quot;surface polish does not equal clinical safety&quot;&gt;&lt;/p&gt;
&lt;p&gt;If you have been paying attention to GitHub recently — the past six months — you have seen the pattern.&lt;/p&gt;
&lt;p&gt;A new bio-AI repository appears. It promises to automate genomic analysis, drug discovery, medical imaging, or clinical data interpretation. The README is polished. The architecture diagram looks serious. Within weeks it has hundreds of stars, a few forks, and a preprint on bioRxiv.&lt;/p&gt;
&lt;p&gt;Then nothing.&lt;/p&gt;
&lt;p&gt;No CI. No CHANGELOG. No response to issues. No clear statement of limitations. No clinical disclaimer anywhere in the repository. And a tool that may now be touching patient-adjacent workflows has exactly one quality gate: the author thought it was ready.&lt;/p&gt;
&lt;p&gt;We are developers. We have built things in that atmosphere too. At some point, we had to ask a harder question than benchmark accuracy:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When a bio-AI repository gets close to real diagnostic, genomic, imaging, or therapeutic workflows — what does &quot;trustworthy enough for serious review&quot; actually mean?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The field has benchmarks for models. It has almost no shared standards for repository accountability.&lt;/p&gt;
&lt;p&gt;So we built one.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-makes-this-moment-different&quot;&gt;What Makes This Moment Different&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ic1knigacj3qxkxmqppt.png&quot; alt=&quot;The cost of being wrong is fundamentally different here&quot;&gt;&lt;/p&gt;
&lt;p&gt;Bio-AI is now filling up with skill libraries, agent wrappers, orchestration pipelines, and plugin-style marketplaces that look far more deployable than they actually are. Surface maturity is easy to fake. A clean README, a marketplace entry, or a rising GitHub star count can make a repository look trustworthy long before it has earned that trust.&lt;/p&gt;
&lt;p&gt;And this category cannot be judged like ordinary software.&lt;/p&gt;
&lt;p&gt;If a note-taking app breaks, users get frustrated.&lt;br&gt;
If an internal dashboard fails, a team loses time.&lt;br&gt;
But when a biomedical or medical-AI repository fails quietly, the consequences do not stop at software quality.&lt;/p&gt;
&lt;p&gt;A flawed genomics pipeline can distort interpretation.&lt;br&gt;
A weak clinical model can normalize unsafe confidence.&lt;br&gt;
A drug-discovery system can push the wrong candidates forward, bury better ones, and send time, capital, and downstream validation effort in the wrong direction.&lt;/p&gt;
&lt;p&gt;In this category, failure is not just a debugging problem.&lt;br&gt;
It is a patient-safety problem and a resource-allocation problem.&lt;/p&gt;
&lt;p&gt;That is why these systems require more than code inspection. They require scrutiny of documentation, limits, provenance, maintenance behavior, and public claims — because the cost of being wrong is fundamentally different here.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-stem-ai-is&quot;&gt;What STEM-AI Is&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ma18rmc5secs0oebheri.png&quot; alt=&quot;what steam-ai is&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STEM-AI (Sovereign Trust Evaluator for Medical AI)&lt;/strong&gt; is a governance audit framework for public bio/medical AI repositories.&lt;/p&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; ask whether a project sounds impressive.&lt;/p&gt;
&lt;p&gt;It asks whether the repository shows observable signs of responsible engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;honest documentation&lt;/li&gt;
&lt;li&gt;consistent public claims&lt;/li&gt;
&lt;li&gt;maintenance discipline&lt;/li&gt;
&lt;li&gt;biological data responsibility&lt;/li&gt;
&lt;li&gt;explicit acknowledgement of limits&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That distinction matters. A repository can look technically sophisticated and still fail the most basic governance test for patient-adjacent use. A polished README is not a safety surface by itself.&lt;/p&gt;
&lt;p&gt;STEM-AI is &lt;strong&gt;not&lt;/strong&gt; a regulatory verdict, clinical certification, or legal assessment. It is a structured review framework designed to give researchers, reviewers, procurement teams, and engineers a more reproducible starting point for discussion. The canonical spec requires a non-waivable disclaimer in every output stating exactly that.&lt;/p&gt;
&lt;p&gt;STEM-AI is meant to support serious review, not replace it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-we-made-it-llm-native&quot;&gt;Why We Made It LLM-Native&lt;/h3&gt;
&lt;p&gt;STEM-AI runs as a structured specification executed by a major LLM.&lt;/p&gt;
&lt;p&gt;The spec is the program. The LLM is the runtime.&lt;/p&gt;
&lt;p&gt;That sounds strange until you look at the design constraint. We did not want a system that &quot;vibes&quot; its way to a trust score. We wanted a system that forces checklist-based scoring, explicit evidence chains, N/A handling for missing data, and hard floors for catastrophic claims. The goal is to reduce evaluator drift by replacing narrative judgment with traceable rubric logic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The model is not supposed to &quot;feel&quot; trust.&lt;br&gt;
It is supposed to count evidence.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;how-it-works&quot;&gt;How It Works&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycgx2uf8b7vdevu2tvxv.png&quot; alt=&quot;how it works&quot;&gt;&lt;/p&gt;
&lt;p&gt;STEM-AI evaluates a repository across three stages. Each stage has a defined checklist. Each score must map back to observable evidence.&lt;/p&gt;
&lt;p&gt;These three stages ask three different questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what the repository says&lt;/li&gt;
&lt;li&gt;what public communication says&lt;/li&gt;
&lt;li&gt;what the codebase actually proves&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;stage-1-readme-intent&quot;&gt;Stage 1 — README Intent&lt;/h4&gt;
&lt;p&gt;If a repository is patient-adjacent, the README is not marketing. It is the first governance surface.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;WHAT WE LOOK FOR (positive signals):

  [R1] Does a Limitations or Known Issues section exist
       and cover a substantial portion of the README
       with specific, actionable content?

  [R2] Is any regulatory framework cited?
       (FDA SaMD guidelines, CE marking, IRB requirements,
        or equivalent)

  [R3] Is there a clinical disclaimer?
       (&quot;This tool is NOT a substitute for clinical judgment&quot;
        or equivalent)

  [R4] Are demographic bias limits or applicable population
       boundaries disclosed?

  [R5] Are reproducibility provisions present?
       (environment pinning, data version, seed values)

WHAT WE PENALIZE (negative signals):

  [H1] Performance superlatives without benchmark comparison
       &quot;SOTA&quot;, &quot;State-of-the-Art&quot;, &quot;Best-in-class&quot;

  [H2] Unsubstantiated innovation claims
       &quot;Revolutionary&quot;, &quot;Groundbreaking&quot;, &quot;Game-changing&quot;

  [H3] Fully autonomous framing in a clinical context
       &quot;Fully Automated&quot;, &quot;Zero Human Oversight&quot;
       without any stated supervision requirement

  [H4] AGI or human-level capability claims
       &quot;AGI&quot;, &quot;Human-level&quot;, &quot;Surpasses clinicians&quot;

  [H5] Social proof substituted for technical credibility
       GitHub stars or download counts cited as a trust signal

  [H6] External optics substituted for technical evidence
       VC funding or press coverage without validation

![The Patient safety trapdoor](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4go8oh9dn80at4x4npu.png)

CRITICAL RULE:
  IF H3 AND H4 are both triggered simultaneously:
    → Hard floor activated.
    → Final Score = 0. Tier = T0. No further scoring.
    → A tool claiming fully automated clinical operation
      at AGI level is a patient safety issue,
      not a scoring edge case.
      No positive signals elsewhere can override this.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;On clinical adjacency:&lt;/strong&gt; STEM-AI does not assume all biomedical repositories carry the same deployment risk. The disclosure bar rises as a tool moves closer to patient-facing or decision-shaping use. If the repository contains medical imaging frameworks, drug docking engines, diagnostic genomics pipelines, or clinical language models, the absence of R2 and R3 is not a missed bonus — it becomes an active penalty.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;stage-2-cross-platform-consistency&quot;&gt;Stage 2 — Cross-Platform Consistency&lt;/h4&gt;
&lt;p&gt;This stage is less about marketing tone and more about contradiction. If a README warns carefully but public posts erase those warnings, the repository's governance surface is inconsistent.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;WHAT WE PENALIZE:

  [F1] Stars or downloads used as the primary message
       on external platforms, without technical substance

  [F2] Public dismissal or hostile response to
       critical feedback from the community

  [F3] Vanity metrics presented as clinical trust proxies

  [F4] External posts that directly contradict or omit
       warnings stated in the README
       → Most serious flag in Stage 2.
         A README that says &quot;not for clinical use&quot; while
         the author's LinkedIn announces clinical deployment
         is a consistency failure.

WHAT WE REWARD:

  [A1] Model errors or hallucination cases
       openly shared in public forums

  [A2] Reproducibility failures or known failure modes
       transparently acknowledged outside the repository

  [A3] Critical external feedback accepted and incorporated

  [A4] Regulatory or ethics body collaboration referenced
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This stage is only as strong as the public evidence available. When live cross-platform data is unavailable, Stage 2 goes N/A and its weight moves to Stages 1 and 3. In medical-adjacent evaluation, pretending to know is worse than stating you do not.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;stage-3-code-infrastructure-and-biological-integrity&quot;&gt;Stage 3 — Code Infrastructure and Biological Integrity&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rtozugmzpzfaxtbacl8m.png&quot; alt=&quot;verifying the proof behind the polish&quot;&gt;&lt;/p&gt;
&lt;p&gt;This is where the framework becomes more than a documentation audit.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;TECHNICAL RESPONSIBILITY:

  [T1] CI/CD pipeline
       Does automated testing run on push or PR?
       Is coverage stated or just implied?

  [T2] Domain-specific regression tests
       Not just unit tests — tests that verify biological
       or clinical correctness invariants.

  [T3] CHANGELOG transparency
       Does one exist?
       Does it document bugs and failures honestly,
       or only feature additions?
       Silent updates on a clinical-adjacent tool are
       a different risk profile than an honest bug log.

  [T4] Issue and PR response pattern
       When did the last maintainer response happen?
       What proportion of issues receive a response?

BIOLOGICAL INTEGRITY:

  [B1] Data provenance and consent
       Where did the training or reference data come from?
       Is there an IRB approval or data consent declaration?

  [B2] Algorithmic bias disclosure
       Are performance limits across demographic subgroups
       disclosed? Are actual measurements provided,
       or only a general acknowledgment?

  [B3] Conflict of interest transparency
       Is the funding source disclosed?
       If there is commercial interest, is it stated?

TRAJECTORY SIGNAL:
  v1.0.4 adds a trajectory modifier comparing issue close
  rates and release frequency across two consecutive
  90-day windows.

  This signal is deliberately bounded: it changes Stage 3
  by at most ±5 points, which translates to roughly ±2
  points on the final weighted score.
  Large enough to matter near tier boundaries.
  Small enough not to distort the audit.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-output-looks-like&quot;&gt;What the Output Looks Like&lt;/h3&gt;
&lt;p&gt;Every STEM-AI audit produces a structured report. Here is an illustrative example — repository name withheld, structure unchanged:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;#  STEM-AI Audit Report v1.0.4
──────────────────────────────────────────────
Target:        [Repository Name]
Audit Date:    2026-03-20
Report Expiry: 2026-09-16
Flags:         CLINICAL_ADJACENT: true
               NASCENT_REPO: false
               T0_HARD_FLOOR: false
──────────────────────────────────────────────
Stage 1 — README Intent        47 / 100  VC Pitch
Stage 2 — Cross-Platform       N/A       (MANUAL mode)
Stage 3 — Code Infrastructure  10 / 100  Hit-and-Run
──────────────────────────────────────────────
Final Score:   28 / 100
Tier:          T0 REJECTED
USE_SCOPE:     None — clinical use prohibited
──────────────────────────────────────────────
Priority Remediation:
  1. Add clinical disclaimer (active penalty applied —
     clinical-adjacent tooling without R3)
  2. Implement CI/CD pipeline (T1: 0 pts)
  3. Disclose data provenance and IRB status (B1: 0 pts)
──────────────────────────────────────────────
⚠ This report is LLM-generated. It is not a regulatory
  determination. Report expires: 2026-09-16.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The expiry date is not cosmetic. A report based on a repository that went inactive months ago should not circulate in procurement pipelines as if it still describes current reality. Version 1.0.4 computes that date from recent project activity automatically.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-the-tiers-mean-and-what-they-do-not&quot;&gt;What the Tiers Mean — and What They Do Not&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pi5linfr9tmpcitsr5e6.png&quot; alt=&quot;The STEAM-AI Tier Matrix&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;T0 Rejected:        Trust not established
                    Clinical use prohibited

T1 Quarantine:      High risk
                    Independent verification required

T2 Caution:         Research reference only
                    Clinical automation forbidden

T3 Review:          Supervised pilot eligible
                    Human oversight mandatory

T4 (highest tier):  Strongest observed governance signals
                    Still requires independent expert review
                    and formal regulatory clearance
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Even at the highest tier, STEM-AI does not substitute for clinical validation, expert review, or regulatory clearance. That is not a disclaimer added to soften the framework. It is how the framework was designed.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;one-design-decision-that-matters&quot;&gt;One Design Decision That Matters&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dmkd4kdz8euf1stkye0r.png&quot; alt=&quot;Engineering integrity supersedes domain pedigree&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Author background does not affect the score.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Whether the author comes from biology, medicine, ML research, or pure software engineering is recorded as contextual information for human reviewers. It is explicitly non-scoring and carries a mandatory bias warning in every report.&lt;/p&gt;
&lt;p&gt;Domain credentials are not the same thing as engineering integrity. And lack of domain pedigree does not imply carelessness. STEM-AI is built to evaluate observable repository governance — not to sort developers by prestige.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-stem-ai-refuses-to-be&quot;&gt;What STEM-AI Refuses To Be&lt;/h3&gt;
&lt;p&gt;A trust framework for medical AI can become dangerous if it turns into a personal attack engine.&lt;/p&gt;
&lt;p&gt;STEM-AI is constrained on purpose. It is limited to public professional repositories and public professional material. It forbids PII inference, private-account speculation, and individual profiling as a use case. Without that boundary, a trust evaluator becomes a harassment tool.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;three-questions-this-framework-is-built-around&quot;&gt;Three Questions This Framework Is Built Around&lt;/h3&gt;
&lt;p&gt;If you remember nothing else from this framework, remember these:&lt;/p&gt;
&lt;blockquote&gt;&lt;ol&gt;
&lt;li&gt;Did the repository describe its limits honestly?&lt;/li&gt;
&lt;li&gt;Did public communication remain consistent with the repository's stated limits?&lt;/li&gt;
&lt;li&gt;Did the codebase show evidence of maintenance and biological responsibility?&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Those are not performance questions. They are accountability questions. For tools that sit upstream of clinical decisions, accountability is not optional.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-comes-tomorrow&quot;&gt;What Comes Tomorrow&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/belheefsc472rgc7rtl7.png&quot; alt=&quot;what to do tomorrow&quot;&gt;&lt;/p&gt;
&lt;p&gt;Tomorrow we publish the first audit set from STEM-AI v1.0.4 across 10 open-source bio-AI repositories — including projects from research institutions, an actively used SaaS platform, and agent-style bioinformatics tooling running inside containerized environments.&lt;/p&gt;
&lt;p&gt;What we can say now:&lt;/p&gt;
&lt;p&gt;The strongest-looking repositories are not always the most accountable. In at least one case, a repository with solid engineering signals still falls short because a critical disclosure is missing from the surface a reviewer would actually read first.&lt;/p&gt;
&lt;p&gt;In another, the safety control exists in the code but fails as governance because it does not activate under default deployment.&lt;/p&gt;
&lt;p&gt;In another, the generation mechanism itself is not the problem. The problem is that users were never clearly told what it was. That is a disclosure failure, not a technical failure. The distinction matters.&lt;/p&gt;
&lt;p&gt;The full breakdown publishes tomorrow.&lt;/p&gt;
&lt;p&gt;Which bio-AI repositories would you want audited next? Drop them in the comments.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;STEM-AI v1.0.4 — full audit results tomorrow.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;Code works. But does the author care about the patient?&quot;&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13429/medical-ai-repositories-need-more-than-benchmarks-we-built-stem-ai-to-audit-trust</guid>
<pubDate>Tue, 24 Mar 2026 12:21:47 +0000</pubDate>
</item>
</channel>
</rss>