File size: 88,887 Bytes
5d47b47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d647970
 
5d47b47
d647970
5d47b47
 
 
 
 
d647970
5d47b47
 
 
 
d647970
 
5d47b47
d647970
5d47b47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>STEM BIO-AI &mdash; yorkeccak/bio</title>
<style>
:root{
  --navy:#0D1F3C;
  --teal:#1A6FA8;
  --green:#1A7A47;
  --amber:#C07B10;
  --red:#9B2335;
  --purple:#5B3D8A;
  --slate:#2D4A6E;
  --bg:#F8FAFC;
  --panel:#FFFFFF;
  --line:#E4EBF5;
  --muted:#5A6B80;
  --tier:#9B2335;
  --shadow-soft:0 10px 28px rgba(13,31,60,.08);
  --shadow-strong:0 20px 48px rgba(13,31,60,.16);
  --radius:18px;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  font-family:"Segoe UI Variable Text","Segoe UI",ui-sans-serif,sans-serif;
  background:
    radial-gradient(circle at top left, rgba(26,111,168,.09), transparent 28%),
    linear-gradient(180deg, #f5f8fc 0%, #F8FAFC 42%, #eef3f9 100%);
  color:#0D1F3C;
  font-size:14px;
  line-height:1.6;
}
h1,h2,h3,.stage-name,.metric-value,.tier{
  font-family:"Iowan Old Style","Palatino Linotype","Book Antiqua",Georgia,serif;
}
.nav{
  position:sticky;top:0;z-index:60;
  background:rgba(255,255,255,.86);
  backdrop-filter:blur(14px);
  display:flex;justify-content:space-between;align-items:center;gap:16px;
  border-bottom:1px solid rgba(13,31,60,.08);
  box-shadow:0 8px 24px rgba(13,31,60,.06);
  padding-right:16px;
}
.nav-links{display:flex;gap:4px;overflow-x:auto;flex:1;min-width:0}
.nav-brand{display:grid;justify-items:end;flex-shrink:0;white-space:nowrap;padding-left:12px;border-left:1px solid rgba(13,31,60,.08)}
.nav-brand strong{font-size:11px;letter-spacing:.08em;color:#0D1F3C}
.nav-brand span{font-size:10px;color:#5A6B80;font-weight:700}
.nav-link{
  padding:14px 18px;color:#5A6B80;font-size:12px;font-weight:700;
  text-decoration:none;transition:color .2s,background .2s,border-color .2s;
  border-bottom:3px solid transparent;white-space:nowrap;
}
.nav-link:hover{color:#0D1F3C;background:rgba(13,31,60,.04);transform:translateY(-1px)}
.nav-link.active{color:#0D1F3C;border-bottom-color:#1A6FA8}
.hero{
  background:
    radial-gradient(circle at top right, rgba(255,255,255,.35), transparent 28%),
    radial-gradient(circle at top left, rgba(255,255,255,.26), transparent 26%),
    linear-gradient(135deg, #2B547B 0%, #3C6C96 46%, #6E9FBE 100%);
  color:#fff;
  padding:42px 48px 46px;
  display:grid;
  grid-template-columns:minmax(180px,220px) 1fr;
  gap:30px;
  align-items:center;
}
.hero-left{display:flex;justify-content:center}
.hero-right{display:flex;flex-direction:column;gap:10px}
.hero h1{font-size:34px;font-weight:700;line-height:1.1;letter-spacing:-.02em}
.hero-link{color:#fff;text-decoration:none;border-bottom:1px solid transparent}
.hero-link:hover{border-bottom-color:rgba(255,255,255,.72)}
.eyebrow{font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:rgba(13,31,60,.62)}
.hero .eyebrow{color:rgba(255,255,255,.82)}
.hero-gauge-card{
  background:rgba(255,255,255,.96);
  border:1px solid rgba(255,255,255,.45);
  border-radius:22px;
  padding:18px 20px 14px;
  box-shadow:0 18px 42px rgba(8,22,38,.18);
}
.hero-meta{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.tier{
  display:inline-block;background:#9B2335;color:#fff;font-size:13px;font-weight:700;
  padding:6px 16px;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12);
}
.hero-chip{
  display:inline-flex;align-items:center;padding:6px 12px;border-radius:999px;
  border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.08);
  color:rgba(255,255,255,.84);font-size:11px;font-weight:700;
}
.lede{font-size:14px;color:rgba(255,255,255,.82);max-width:720px}
.content{max-width:1180px;margin:0 auto;padding:34px 24px 54px}
section{margin-bottom:34px;scroll-margin-top:72px}
.s-title{font-size:24px;font-weight:700;color:#0D1F3C;margin-bottom:16px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.subhead{font-size:22px;font-weight:700;color:#0D1F3C;margin:2px 0 10px}
.panel{
  background:#FFFFFF;
  border:1px solid rgba(13,31,60,.07);
  border-radius:var(--radius);
  padding:24px;
  box-shadow:var(--shadow-soft);
}
.panel:hover,
.metric-card:hover,
.memo-card:hover,
.stage-card:hover{
  box-shadow:var(--shadow-strong);
  transform:translateY(-2px);
}
.memo-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:18px}
.integrity-stack,.airi-stack{display:grid;grid-template-columns:1fr;gap:18px}
.memo-card,.stage-card{
  background:#FFFFFF;
  border:1px solid rgba(13,31,60,.08);
  border-radius:var(--radius);
  padding:20px 20px 18px;
  box-shadow:var(--shadow-soft);
}
.memo-primary{background:linear-gradient(180deg,#ffffff 0%,#f8fbff 100%)}
.memo-card:nth-child(1){grid-column:span 6}
.memo-card:nth-child(2),.memo-card:nth-child(3),.memo-card:nth-child(4){grid-column:span 6}
.memo-text{font-size:13px;color:#0D1F3C}
.memo-note,.muted-note,.muted{font-size:11px;color:#5A6B80;line-height:1.5}
.memo-list{padding-left:18px;display:grid;gap:8px;font-size:12px;color:#0D1F3C}
.pill-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.pill{display:inline-flex;align-items:center;padding:5px 11px;border-radius:999px;background:#F8FAFC;border:1px solid #E4EBF5;font-size:11px;font-weight:700;color:#0D1F3C}
.metric-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px;margin-bottom:18px}
.metric-card{
  background:#FFFFFF;border:1px solid rgba(13,31,60,.08);border-radius:16px;
  padding:18px 16px;box-shadow:var(--shadow-soft);text-align:center
}
.metric-value{font-size:32px;font-weight:700;line-height:1;margin-bottom:6px}
.metric-label{font-size:11px;color:#5A6B80;font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.alert-t0{background:#9B2335;color:#fff;padding:15px 18px;border-radius:14px;margin-bottom:18px;font-weight:700;box-shadow:var(--shadow-soft)}
.decision-panel{padding:18px}
.formula-banner{
  margin-bottom:16px;padding:12px 14px;border-radius:14px;background:#eef5fb;
  border:1px solid #d7e5f4;font-size:12px;color:#0D1F3C;font-family:"Consolas","SFMono-Regular",monospace
}
.config-pattern{
  display:grid;
  grid-template-columns:minmax(0,1.2fr) minmax(0,1.8fr);
  gap:18px;
  margin-bottom:18px;
  padding:18px;
  border-radius:16px;
  background:linear-gradient(180deg,#fbfdff 0%,#f2f7fc 100%);
  border:1px solid #dbe6f1;
}
.config-copy{display:grid;gap:10px;align-content:start}
.config-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.config-card{
  background:#FFFFFF;
  border:1px solid rgba(13,31,60,.08);
  border-radius:14px;
  padding:12px;
  box-shadow:var(--shadow-soft);
}
.config-label{
  font-size:10px;
  font-weight:800;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:#5A6B80;
  margin-bottom:8px;
}
.config-code{
  font-family:"Consolas","SFMono-Regular",monospace;
  font-size:11px;
  line-height:1.55;
  white-space:pre-wrap;
  color:#0D1F3C;
  background:#f7fafc;
  border:1px solid #e3ebf3;
  border-radius:10px;
  padding:10px 11px;
  overflow:auto;
}
.stage-deck{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.stage-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px}
.stage-name{font-size:18px;font-weight:700;color:#0D1F3C;line-height:1.2}
.stage-value{font-size:26px;font-weight:700;line-height:1}
.stage-summary{font-size:12px;color:#5A6B80;margin:12px 0 10px}
.focus-list{list-style:none;display:grid;gap:10px}
.focus-line{padding-top:10px;border-top:1px solid rgba(13,31,60,.08)}
.focus-top{display:flex;justify-content:space-between;gap:12px;align-items:baseline;margin-bottom:4px}
.focus-key{font-size:12px;font-weight:700;color:#0D1F3C}
.focus-score{font-size:12px;font-weight:800;color:#0D1F3C}
.focus-detail{font-size:11px;color:#5A6B80;line-height:1.55}
.focus-detector{display:inline-flex;margin-right:8px;padding:2px 8px;border-radius:999px;background:#f2f6fa;border:1px solid #E4EBF5;font-family:"Consolas","SFMono-Regular",monospace;color:#5B3D8A}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.card{background:#FFFFFF;border-radius:14px;box-shadow:var(--shadow-soft);cursor:pointer;transition:box-shadow .2s,transform .15s;overflow:hidden;outline:none;border:1px solid rgba(13,31,60,.06)}
.card:hover{box-shadow:var(--shadow-strong);transform:translateY(-2px)}
.card:focus{box-shadow:0 0 0 3px rgba(26,111,168,.2)}
.card.expanded{box-shadow:var(--shadow-strong)}
.card.expanded .caret{transform:rotate(180deg)}
.caret{display:block;transition:transform .2s}
.faq-block{display:grid;gap:10px;margin-top:16px}
.faq-item{border-top:1px solid rgba(13,31,60,.08);padding-top:10px}
.faq-item summary{cursor:pointer;font-size:12px;font-weight:800;color:#0D1F3C;list-style:none}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item p{margin-top:8px;font-size:12px;color:#5A6B80}
.tip-icon{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:50%;background:#E4EBF5;color:#5A6B80;font-size:10px;font-weight:800;cursor:help;position:relative;flex-shrink:0;vertical-align:middle}
[data-tooltip]{position:relative}
[data-tooltip]::after{
  content:attr(data-tooltip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);
  background:#0D1F3C;color:#fff;padding:9px 12px;border-radius:10px;font-size:11px;line-height:1.45;white-space:normal;
  max-width:280px;width:max-content;opacity:0;pointer-events:none;transition:opacity .2s;z-index:200;text-align:left;
  font-weight:500;box-shadow:0 10px 28px rgba(0,0,0,.25)
}
[data-tooltip]:hover::after,[data-tooltip]:focus::after{opacity:1}
.toggle-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.toggle-group{display:flex;border:1px solid #E4EBF5;border-radius:999px;overflow:hidden;width:fit-content;background:#FFFFFF}
.toggle-btn{padding:8px 18px;font-size:12px;font-weight:800;color:#5A6B80;background:#FFFFFF;border:none;cursor:pointer;transition:all .2s}
.toggle-btn:hover{background:#F8FAFC}
.toggle-btn.active{background:#0D1F3C;color:#fff}
.risk-item{padding:12px 15px;border-left:4px solid #C07B10;margin-bottom:10px;background:#FFFFFF;border-radius:0 10px 10px 0;font-size:12px;color:#0D1F3C;line-height:1.5;transition:border-color .2s,box-shadow .2s}
.risk-item:hover{border-left-color:#9B2335;box-shadow:0 2px 8px rgba(0,0,0,.08)}
.domain-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-bottom:18px}
.domain-card{display:flex;align-items:center;gap:10px;padding:11px 14px;background:#FFFFFF;border:1.5px solid #E4EBF5;border-radius:12px;transition:border-color .15s,box-shadow .15s;user-select:none}
.domain-card:hover{border-color:#1A6FA8;box-shadow:var(--shadow-strong);transform:translateY(-2px)}
.domain-card.domain-active{border-color:var(--d-color,#1A6FA8);box-shadow:0 0 0 3px color-mix(in srgb,var(--d-color,#1A6FA8) 18%,transparent)}
.domain-num{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;color:#fff;font-size:11px;font-weight:800;flex-shrink:0}
.domain-label{font-size:11px;color:#0D1F3C;font-weight:700;flex:1;line-height:1.3}
.domain-cnt{font-size:12px;font-weight:800;flex-shrink:0}
.airi-tag{font-size:12px;color:#5A6B80;font-weight:500;margin-left:4px}
.airi-kpi{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin-top:14px}
.airi-copy{display:grid;gap:8px;min-width:240px}
.metric-inline{font-size:12px;color:#0D1F3C}
.airi-table{width:100%;border-collapse:collapse}
.airi-table th{padding:10px 8px;font-size:11px;text-align:left;color:#5A6B80;background:#F8FAFC;font-weight:800;text-transform:uppercase;letter-spacing:.05em}
.airi-table tr:hover{background:#F8FAFC}
.ev-row{transition:background .15s;cursor:default}
.ev-row:hover{background:#F8FAFC}
.filter-chip{display:inline-flex;align-items:center;padding:5px 12px;border-radius:999px;font-size:11px;font-weight:800;cursor:pointer;border:1px solid #E4EBF5;margin:0 6px 8px 0;transition:all .15s;background:#FFFFFF;user-select:none}
.filter-chip.active{background:#0D1F3C;color:#fff;border-color:#0D1F3C}
.filter-chip:hover:not(.active){background:#F8FAFC}
.footer{font-size:11px;color:#5A6B80;text-align:center;padding:24px 0;border-top:1px solid rgba(13,31,60,.08);margin-top:40px}
@media(max-width:1000px){
  .metric-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .stage-deck{grid-template-columns:1fr}
  .memo-card,.memo-card:nth-child(1),.memo-card:nth-child(2),.memo-card:nth-child(3),.memo-card:nth-child(4){grid-column:span 12}
  .config-pattern{grid-template-columns:1fr}
  .config-grid{grid-template-columns:1fr}
}
@media(max-width:760px){
  .hero{padding:28px 22px;grid-template-columns:1fr}
  .content{padding:24px 14px 42px}
  .nav{padding-right:10px}
  .nav-brand{display:none}
  .nav-link{padding:12px 12px;font-size:11px}
  .metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:520px){
  .metric-grid{grid-template-columns:1fr}
  .s-title{font-size:21px}
  .hero h1{font-size:28px}
}
</style>
</head>
<body>
<nav class="nav" aria-label="Report sections"><div class="nav-links"><a href="#s1" class="nav-link">1. Summary</a><a href="#s2" class="nav-link">2. Decision Path</a><a href="#s3" class="nav-link">3. Code Integrity</a><a href="#s4" class="nav-link">4. AIRI Risk Triggers</a><a href="#s5" class="nav-link">5. Evidence</a></div><div class="nav-brand"><strong>STEM-BIO-AI</strong><span>STEM BIO-AI Local CLI Scan &nbsp;|&nbsp; 1.8.0</span></div></nav>
<header class="hero"><div class="hero-left"><div class="hero-gauge-card"><svg width="160" height="108" viewBox="0 0 160 108" aria-label="Score gauge: 48/100"><path d="M 16,80 A 64,64 0 0,1 144,80" fill="none" stroke="#E4EBF5" stroke-width="14" stroke-linecap="round"/><path d="M 16,80 A 64,64 0 0,1 75.98,16.13" fill="none" stroke="#D65D6D" stroke-width="14" stroke-linecap="round"/><text x="80" y="90" text-anchor="middle" font-size="32" font-weight="700" fill="#D65D6D">48</text><text x="80" y="108" text-anchor="middle" font-size="11" fill="#5A6B80">/ 100</text></svg></div></div><div class="hero-right"><div class="eyebrow">STEM BIO-AI Local Audit &nbsp;|&nbsp; 2026-05-31</div><h1><a href="https://github.com/yorkeccak/bio" class="hero-link" target="_blank" rel="noopener noreferrer">yorkeccak/bio</a></h1><div class="hero-meta"><span class="tier">T1 Quarantine</span><span class="hero-chip">Deterministic local scan</span><span class="hero-chip">No LLM / no network / no runtime execution</span></div><p class="lede">Exploratory review only; no patient-adjacent use.</p></div></header>
<div class="content">
<section id="s1"><h2 class="s-title">Executive Summary</h2><div class="metric-grid"><div class="metric-card"><div class="metric-value" style="color:#9B2335">48</div><div class="metric-label">Final Score</div></div><div class="metric-card"><div class="metric-value" style="color:#1A6FA8">75</div><div class="metric-label">S1 Intent</div></div><div class="metric-card"><div class="metric-value" style="color:#5B3D8A">40</div><div class="metric-label">S2 Repo</div></div><div class="metric-card"><div class="metric-value" style="color:#2D4A6E">25</div><div class="metric-label">S3 Code/Bio</div></div><div class="metric-card"><div class="metric-value" style="color:#1A7A47">30</div><div class="metric-label">S4 Replication</div></div></div><div class="memo-grid"><article class="memo-card memo-primary"><div class="eyebrow">TL;DR</div><h3>Decision memo</h3><p class="memo-text">This repository lands at <strong>T1 Quarantine</strong> with a final score of <strong>48/100</strong>. The result is driven more by boundary, workflow-support, and governance weaknesses than by classic code-pattern failures.</p><div class="pill-row"><span class="pill">Policy: default</span><span class="pill">Status: authoritative_release</span><span class="pill">Mode: mirror_only</span></div></article><article class="memo-card"><div class="eyebrow">Primary Risks</div><h3>What pushed the review down</h3><ul class="memo-list"><li>Clinical-adjacent surfaces exist without an explicit non-diagnostic/non-clinical boundary.</li><li>Self-asserted compliance or privacy-governance claim requires independent verification.</li><li>Legal, privacy, or compliance claim appears without supporting governance or security-grounding evidence in reviewed repository sources.</li><li>Core workflow appears materially dependent on named external service providers; local or self-host claims may overstate operational independence.</li><li>External operational dependency signal surfaced in code-integrity lane.</li></ul></article><article class="memo-card"><div class="eyebrow">Positive Evidence</div><h3>What still supports reviewability</h3><ul class="memo-list"><li>Package metadata was available for repo-local consistency checks.</li></ul></article><article class="memo-card"><div class="eyebrow">Freshness</div><h3>When to re-check</h3><p class="memo-text">Review after <strong>45</strong> days. Expires on <strong>2026-07-15</strong>.</p><p class="memo-note">Change-triggered re-audit now: False</p></article></div><div class="memo-grid" style="margin-top:18px"><article class="memo-card"><div class="eyebrow">Stage 2R Focus</div><h3>Repo-local contradictions</h3><ul class="focus-list"><li class="focus-line"><div class="focus-top"><span class="focus-key">R2R_D2_missing_clinical_use_boundary</span><span class="focus-score">-20</span></div><div class="focus-detail"><span class="focus-detector">R2R_D2_missing_clinical_use_boundary</span>clinical_adjacent=True and explicit non-clinical boundary was not detected | tier impact: can contribute to clinical score ceilings and hard-floor review paths when stronger clinical deployment or certainty claims are also present</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">R2R_D4_unsupported_workflow_claim</span><span class="focus-score">-15</span></div><div class="focus-detail"><span class="focus-detector">R2R_D4_unsupported_workflow_claim</span>workflow/demo/CLI claims detected while workflow, tests, or local support entrypoints are absent</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">R2R_1_readme_package_code_alignment</span><span class="focus-score">+15</span></div><div class="focus-detail"><span class="focus-detector">R2R_1_readme_package_code_alignment</span>shared bio-domain terms detected across README and package metadata</div></li></ul></article><article class="memo-card"><div class="eyebrow">Stage 3 Focus</div><h3>Accountability surfaces</h3><ul class="focus-list"><li class="focus-line"><div class="focus-top"><span class="focus-key">B1_data_provenance_controls</span><span class="focus-score">+15</span></div><div class="focus-detail"><span class="focus-detector">S3_B1_dependency_manifest</span>dependency or lock manifest presence plus data-source, dataset, or IRB language review</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">B3_coi_funding</span><span class="focus-score">+5</span></div><div class="focus-detail"><span class="focus-detector">S3_B3_coi_funding</span>COI/funding/sponsor language review across README, docs, FUNDING, CITATION, and AUTHORS surfaces</div></li></ul></article><article class="memo-card"><div class="eyebrow">Policy Boundary</div><h3>How to read this artifact</h3><p class="memo-text">Mirror-only policy surface: selected profile metadata is shown in this report, but authoritative scan scoring still follows deterministic runtime constants. Preview-only posture changes, including Stage 4 replication emphasis, do not change the formal score until a future read-through phase.</p></article></div></section>
<section id="s2"><h2 class="s-title">Decision Path <span class="tip-icon" data-tooltip="This section explains where the score came from, with rubric-level movement and detector-linked rationale where available." tabindex="0">?</span></h2><div class="panel decision-panel"><div class="formula-banner">Final = 0.4 × S1 + 0.2 × S2R + 0.4 × S3 − C1_penalty &nbsp;|&nbsp; Stage 4 remains a separate replication lane.</div><div class="config-pattern"><div class="config-copy"><div class="eyebrow">Configured, Not Rewritten</div><h3 class="subhead">Changing review posture does not require touching the score core</h3><p class="memo-text">Use <code>stem policy simulate</code> with a governed profile file when you want to preview a different review posture. The authoritative score path stays deterministic; the profile is surfaced as metadata and preview-only interpretation.</p><p class="memo-note">If you only need the default posture, you do not need a profile file at all.</p></div><div class="config-grid"><article class="config-card"><div class="config-label">profile.json</div><pre class="config-code">{
  "profile_name": "strict_clinical_adjacency",
  "profile_read_mode": "mirror_only"
}</pre></article><article class="config-card"><div class="config-label">command</div><pre class="config-code">stem policy simulate /path/to/repo --profile-file profile.json</pre></article><article class="config-card"><div class="config-label">artifact note</div><pre class="config-code">Calibration Effect: mirror-only
Policy metadata surfaced
Formal score unchanged</pre></article></div></div><div class="stage-deck"><article class="stage-card"><div class="stage-card-top"><div class="stage-name">Stage 1 — README Intent <span class="tip-icon" data-tooltip="Stage 1: Scans README/docs for hype language, overconfidence claims, and missing clinical disclaimers." tabindex="0">?</span></div><div class="stage-value" style="color:#1A6FA8">75</div></div><svg width="270" height="20" viewBox="0 0 270 20"><rect width="270" height="20" rx="5" fill="#E4EBF5"/><rect width="202" height="20" rx="5" fill="#1A6FA8"/></svg><p class="stage-summary">Claim language, limitation posture, and clinical boundary wording.</p><ul class="focus-list"><li class="focus-line"><div class="focus-top"><span class="focus-key">R3_clinical_disclaimer</span><span class="focus-score">-5</span></div><div class="focus-detail">CA-INDIRECT surface lacks explicit non-clinical or non-diagnostic boundary.</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">S1_domain_readme</span><span class="focus-score">+10</span></div><div class="focus-detail">README exposes bio/medical domain vocabulary.</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">S1_domain_package</span><span class="focus-score">+5</span></div><div class="focus-detail">Package metadata exposes bio/medical domain vocabulary.</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">R2_regulatory_framework</span><span class="focus-score">+5</span></div><div class="focus-detail">Self-asserted privacy/compliance language detected without stronger regulatory-framework evidence.</div></li></ul></article><article class="stage-card"><div class="stage-card-top"><div class="stage-name">Stage 2R — Repo Consistency <span class="tip-icon" data-tooltip="Stage 2R: Cross-checks API names advertised in README against actual code exports and __all__ lists." tabindex="0">?</span></div><div class="stage-value" style="color:#C07B10">40</div></div><svg width="270" height="20" viewBox="0 0 270 20"><rect width="270" height="20" rx="5" fill="#E4EBF5"/><rect width="108" height="20" rx="5" fill="#C07B10"/></svg><p class="stage-summary">Internal contradictions between README, workflow claims, and support surfaces.</p><ul class="focus-list"><li class="focus-line"><div class="focus-top"><span class="focus-key">R2R_D2_missing_clinical_use_boundary</span><span class="focus-score">-20</span></div><div class="focus-detail"><span class="focus-detector">R2R_D2_missing_clinical_use_boundary</span>clinical_adjacent=True and explicit non-clinical boundary was not detected | tier impact: can contribute to clinical score ceilings and hard-floor review paths when stronger clinical deployment or certainty claims are also present</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">R2R_D4_unsupported_workflow_claim</span><span class="focus-score">-15</span></div><div class="focus-detail"><span class="focus-detector">R2R_D4_unsupported_workflow_claim</span>workflow/demo/CLI claims detected while workflow, tests, or local support entrypoints are absent</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">R2R_1_readme_package_code_alignment</span><span class="focus-score">+15</span></div><div class="focus-detail"><span class="focus-detector">R2R_1_readme_package_code_alignment</span>shared bio-domain terms detected across README and package metadata</div></li></ul></article><article class="stage-card"><div class="stage-card-top"><div class="stage-name">Stage 3 — Code / Bio Responsibility <span class="tip-icon" data-tooltip="Stage 3: AST scan for clinical safety patterns: PII validators, exception handling, dependency pinning." tabindex="0">?</span></div><div class="stage-value" style="color:#9B2335">25</div></div><svg width="270" height="20" viewBox="0 0 270 20"><rect width="270" height="20" rx="5" fill="#E4EBF5"/><rect width="68" height="20" rx="5" fill="#9B2335"/></svg><p class="stage-summary">Engineering accountability, provenance, and reviewable responsibility surfaces.</p><ul class="focus-list"><li class="focus-line"><div class="focus-top"><span class="focus-key">B1_data_provenance_controls</span><span class="focus-score">+15</span></div><div class="focus-detail"><span class="focus-detector">S3_B1_dependency_manifest</span>dependency or lock manifest presence plus data-source, dataset, or IRB language review</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">B3_coi_funding</span><span class="focus-score">+5</span></div><div class="focus-detail"><span class="focus-detector">S3_B3_coi_funding</span>COI/funding/sponsor language review across README, docs, FUNDING, CITATION, and AUTHORS surfaces</div></li></ul></article><article class="stage-card"><div class="stage-card-top"><div class="stage-name">Stage 4 — Replication <span class="tip-icon" data-tooltip="Stage 4: Evaluates reproducibility artifacts: seed fixation, dataset pinning, environment lock files." tabindex="0">?</span></div><div class="stage-value" style="color:#9B2335">30</div></div><svg width="270" height="20" viewBox="0 0 270 20"><rect width="270" height="20" rx="5" fill="#E4EBF5"/><rect width="81" height="20" rx="5" fill="#9B2335"/></svg><p class="stage-summary">Reproducibility evidence is reported separately and does not alter the formal tier.</p><ul class="focus-list"><li class="focus-line"><div class="focus-top"><span class="focus-key">S4_container_environment</span><span class="focus-score">+10</span></div><div class="focus-detail">Container or compose file exists.</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">S4_environment_lock_evidence</span><span class="focus-score">+10</span></div><div class="focus-detail">Environment, dependency, or lock manifest detected.</div></li><li class="focus-line"><div class="focus-top"><span class="focus-key">S4_exact_dependency_pins_or_hashes</span><span class="focus-score">+10</span></div><div class="focus-detail">Exact dependency pin or hash evidence detected.</div></li></ul></article></div></div></section>
<section id="s3"><h2 class="s-title">Code Integrity &amp; Contract <span class="tip-icon" data-tooltip="C1-C6: static code and governance checks. CC1-CC3: Layer 2 AST contract detectors. PASS means no mapped trigger was detected in the current rule scope, not that the whole repository is mature." tabindex="0">?</span></h2><div class="integrity-stack"><div class="panel"><div class="eyebrow">Warnings First</div><h3 class="subhead">Mapped risk lanes that fired</h3><div class="card-grid"><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #C07B10;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">C2 Dependency Pinning</div><div style="font-size:13px;font-weight:700;color:#C07B10;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#C07B10;display:inline-block"></span>WARN</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">External operational dependency signal surfaced in code-integrity lane.</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">External operational dependency signal surfaced in code-integrity lane.</li><li style="margin-bottom:3px">.env.example:24 VALYU_API_KEY=valyu_your_api_key_here</li><li style="margin-bottom:3px">.env.example:38 DAYTONA_API_KEY=your_daytona_api_key_here</li><li style="margin-bottom:3px">README.md:23 - **One Unified Search** - Powered by Valyu's specialized biomedical data API</li></ul></div></div><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #C07B10;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">C5 Compliance Boundary Integrity</div><div style="font-size:13px;font-weight:700;color:#C07B10;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#C07B10;display:inline-block"></span>WARN</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">Unsupported legal/compliance claim surfaced in boundary-integrity lane.</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">Unsupported legal/compliance claim surfaced in boundary-integrity lane.</li><li style="margin-bottom:3px">README.md:262 - HIPAA-compliant architecture (when self-hosted)</li><li style="margin-bottom:3px">Clinical-adjacent surfaces exist without an explicit non-diagnostic/non-clinical boundary.</li></ul></div></div><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #C07B10;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">C6 Mock Auth / Fail-Open Boundary</div><div style="font-size:13px;font-weight:700;color:#C07B10;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#C07B10;display:inline-block"></span>WARN</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">Mock-auth or auto-login boundary surfaced in code-integrity lane.</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">Mock-auth or auto-login boundary surfaced in code-integrity lane.</li><li style="margin-bottom:3px">README.md:51 - **No authentication required** - Auto-login as dev user</li><li style="margin-bottom:3px">README.md:110 You'll be automatically logged in as `dev@localhost` with full access to all features.</li><li style="margin-bottom:3px">README.md:134 2. **Mock Authentication**</li><li style="margin-bottom:3px">README.md:135 - Auto-login as dev user (`dev@localhost`)</li></ul></div></div></div></div><div class="panel"><div class="eyebrow">Clear Lanes</div><h3 class="subhead">What stayed quiet in the current rule scope</h3><div class="card-grid"><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #1A7A47;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">C1 Hardcoded Credentials</div><div style="font-size:13px;font-weight:700;color:#1A7A47;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#1A7A47;display:inline-block"></span>PASS</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">No direct credential patterns detected by local CLI scan.</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">No direct credential patterns detected by local CLI scan.</li></ul></div></div><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #1A7A47;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">C3 Deprecated Patient Paths</div><div style="font-size:13px;font-weight:700;color:#1A7A47;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#1A7A47;display:inline-block"></span>PASS</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">No deprecated patient-adjacent metadata patterns detected.</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">No deprecated patient-adjacent metadata patterns detected.</li></ul></div></div><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #1A7A47;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">C4 Fail-Open Exceptions</div><div style="font-size:13px;font-weight:700;color:#1A7A47;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#1A7A47;display:inline-block"></span>PASS</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">No executable fail-open exception handler detected.</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">No executable fail-open exception handler detected.</li></ul></div></div><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #1A7A47;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">CC1 Clinical Zero Default</div><div style="font-size:13px;font-weight:700;color:#1A7A47;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#1A7A47;display:inline-block"></span>PASS</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">count=0</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">count=0</li></ul></div></div><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #1A7A47;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">CC2 API Contract</div><div style="font-size:13px;font-weight:700;color:#1A7A47;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#1A7A47;display:inline-block"></span>PASS</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">count=0</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">count=0</li></ul></div></div><div class="card" onclick="toggleCard(this)" tabindex="0" role="button" aria-expanded="false"><div style="border-top:3px solid #1A7A47;padding:16px 18px"><div style="font-size:11px;font-weight:700;color:#5A6B80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px">CC3 Shallow Validator</div><div style="font-size:13px;font-weight:700;color:#1A7A47;display:flex;align-items:center;gap:6px;margin-bottom:8px"><span style="width:10px;height:10px;border-radius:50%;background:#1A7A47;display:inline-block"></span>PASS</div><div style="font-size:11px;color:#5A6B80;line-height:1.4">count=0</div><div class="caret" style="text-align:right;margin-top:6px;font-size:16px;color:#5A6B80">&#8964;</div></div><div class="card-detail" style="display:none;padding:0 18px 14px;border-top:1px solid #E4EBF5"><ul style="padding-left:16px;margin:10px 0 0;font-size:11px;color:#0D1F3C;line-height:1.7"><li style="margin-bottom:3px">count=0</li></ul></div></div></div><div class="faq-block"><details class="faq-item"><summary>Why can Code Integrity contain PASS while the overall score is still low?</summary><p>Because Code Integrity is a narrow detector family. The formal score is still driven mainly by Stage 1, Stage 2R, and Stage 3 evidence posture.</p></details><details class="faq-item"><summary>What changed in the C4 / C5 / C6 split?</summary><p>C4 is now reserved for executable fail-open exception behavior, C5 for unsupported compliance or boundary integrity claims, and C6 for mock-auth or no-auth trust-boundary signals.</p></details></div></div></div></section>
<section id="s4"><h2 class="s-title">MIT AI Risk Repository Coverage <span class="tip-icon" data-tooltip="Coverage counts only risks reached through local detector mappings. Coverage is not a safety verdict, and unmapped review concerns remain outside the numerator." tabindex="0">?</span><span class="airi-tag">V4_03 | airisk.mit.edu</span></h2><div class="airi-stack"><div class="panel"><div class="eyebrow">Feature Explainer</div><h3 class="subhead">What this section is doing</h3><p class="memo-text">AIRI is used here as a bounded risk-vocabulary layer around deterministic repository findings. The report uses the curated runtime bundle, not the full upstream AIRI universe.</p><div class="airi-kpi"><div class="airi-donut"><svg width="98" height="98" viewBox="0 0 98 98"><circle cx="49" cy="49" r="39" fill="none" stroke="#E4EBF5" stroke-width="10"/><circle cx="49" cy="49" r="39" fill="none" stroke="#1A7A47" stroke-width="10" stroke-dasharray="53.66 191.38" stroke-linecap="round" transform="rotate(-90 49 49)"/><text x="49" y="54" text-anchor="middle" font-size="13" font-weight="700" fill="#1A7A47">21%</text></svg></div><div class="airi-copy"><div class="metric-inline"><strong>7 / 32</strong> risks in detector scope</div><div class="metric-inline">Bundle scope: <strong>curated_medical_clinical_subset</strong></div><div class="metric-inline">Snapshot: <strong>2026-04-23</strong> | License: <strong>MIT</strong></div><p class="memo-note">Derived from The AI Risk Repository V4_03. Original source remains MIT-licensed and must be attributed in README, docs, runtime artifacts, and local registry metadata.</p></div></div><div class="faq-block" style="margin-top:18px"><details class="faq-item"><summary>What does 7 / 32 mean?</summary><p>It means seven AIRI risk IDs are currently reached by active local detector mappings, out of thirty-two AIRI risk IDs in the current detector scope.</p></details><details class="faq-item"><summary>What does “why mapped” mean?</summary><p>Each covered AIRI row carries a bounded explanation built from the triggered detector, the local mapping justification, and the trigger reason surfaced by the scan.</p></details><details class="faq-item"><summary>What does AIRI not prove here?</summary><p>AIRI does not independently verify harm, causality, clinical failure, or legal noncompliance. It is a risk-vocabulary layer around local findings.</p></details></div><div class="config-pattern" style="margin-top:18px"><div class="config-copy"><div class="eyebrow">Mapped, Not Guessed</div><h3 class="subhead">AIRI rows light up through active detector mappings</h3><p class="memo-text">The report does not infer AIRI coverage from prose alone. Coverage appears when a local detector fires and a governed mapping exists in the current AIRI runtime bundle.</p></div><div class="config-grid"><article class="config-card"><div class="config-label">trigger</div><pre class="config-code">C6_mock_auth_or_fail_open_boundary
status: detected</pre></article><article class="config-card"><div class="config-label">mapping</div><pre class="config-code">R2R_D5_single_external_service_dependency
→ 72.04.02 Market Concentration</pre></article><article class="config-card"><div class="config-label">report surface</div><pre class="config-code">covered_by: detector id
why: bounded mapping reason</pre></article></div></div></div><div class="panel"><div class="eyebrow">Coverage Explorer</div><h3 class="subhead">Covered and gap rows</h3><div class="domain-grid"><div class="domain-card" data-domain="0" data-covered="7" data-gaps="5" onclick="filterDomain(0)" style="cursor:pointer"><span class="domain-num" style="background:#0D1F3C">All</span><span class="domain-label">All Domains</span><span class="domain-cnt" style="color:#0D1F3C">7/5</span></div><div class="domain-card" data-domain="1" data-covered="0" data-gaps="1" onclick="filterDomain(1)" style="cursor:pointer"><span class="domain-num" style="background:#B5272A">1</span><span class="domain-label">Discrimination & Toxicity</span><span class="domain-cnt" style="color:#B5272A">0/1</span></div><div class="domain-card" data-domain="2" data-covered="1" data-gaps="1" onclick="filterDomain(2)" style="cursor:pointer"><span class="domain-num" style="background:#1E3A6E">2</span><span class="domain-label">Privacy & Security</span><span class="domain-cnt" style="color:#1E3A6E">1/1</span></div><div class="domain-card" data-domain="3" data-covered="1" data-gaps="1" onclick="filterDomain(3)" style="cursor:pointer"><span class="domain-num" style="background:#C07020">3</span><span class="domain-label">Misinformation</span><span class="domain-cnt" style="color:#C07020">1/1</span></div><div class="domain-card" data-domain="4" data-covered="0" data-gaps="0" onclick="filterDomain(4)" style="opacity:.55;cursor:pointer"><span class="domain-num" style="background:#6B3FA0">4</span><span class="domain-label">Malicious Actors & Misuse</span><span class="domain-cnt" style="color:#6B3FA0">0/0</span></div><div class="domain-card" data-domain="5" data-covered="1" data-gaps="0" onclick="filterDomain(5)" style="cursor:pointer"><span class="domain-num" style="background:#1B7A4E">5</span><span class="domain-label">Human-Computer Interaction</span><span class="domain-cnt" style="color:#1B7A4E">1/0</span></div><div class="domain-card" data-domain="6" data-covered="1" data-gaps="1" onclick="filterDomain(6)" style="cursor:pointer"><span class="domain-num" style="background:#7A6520">6</span><span class="domain-label">Socioeconomic & Environmental</span><span class="domain-cnt" style="color:#7A6520">1/1</span></div><div class="domain-card" data-domain="7" data-covered="3" data-gaps="1" onclick="filterDomain(7)" style="cursor:pointer"><span class="domain-num" style="background:#1A5568">7</span><span class="domain-label">AI System Safety, Failures & Limitations</span><span class="domain-cnt" style="color:#1A5568">3/1</span></div></div><div class="toggle-row"><div class="toggle-group"><button class="toggle-btn" data-view="covered" onclick="airiToggle('covered')">Covered (7)</button><button class="toggle-btn" data-view="gaps" onclick="airiToggle('gaps')">Gaps (5)</button></div><span class="muted-note">Click a domain card to filter. Counts are shown as covered / gaps.</span></div><div style="overflow-x:auto"><table class="airi-table"><thead><tr><th>ID</th><th>Risk</th><th>Domain</th><th>Covered by / Note</th></tr></thead><tbody><tr class="airi-covered" data-domain="7" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">24.01.03</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Safe exploration problem with widely deployed AI assist</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">Lack of capability or robustness</td><td style="padding:8px 6px;font-size:11px;color:#1A7A47">primary=C5_compliance_boundary_integrity | C5_compliance_boundary</td></tr><tr class="airi-covered" data-domain="5" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">24.04.01</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Physical and Psychological Harms</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">Overreliance and unsafe use</td><td style="padding:8px 6px;font-size:11px;color:#1A7A47">primary=C2_dependency_pinning | C2_dependency_pinning: External o</td></tr><tr class="airi-covered" data-domain="2" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">33.01.05</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Privacy and security</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">Compromise of privacy / PII leak</td><td style="padding:8px 6px;font-size:11px;color:#1A7A47">primary=C2_dependency_pinning | C2_dependency_pinning: External o</td></tr><tr class="airi-covered" data-domain="7" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">39.25.00</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Verifiability</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">Lack of transparency or interpre</td><td style="padding:8px 6px;font-size:11px;color:#1A7A47">primary=S1_R2_unsupported_legal_or_compliance_claim | S1_R2_unsup</td></tr><tr class="airi-covered" data-domain="7" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">60.02.01</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Reliability issues</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">Lack of capability or robustness</td><td style="padding:8px 6px;font-size:11px;color:#1A7A47">primary=R2R_D5_single_external_service_dependency | R2R_D5_single</td></tr><tr class="airi-covered" data-domain="3" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">69.01.00</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">False information</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">False or misleading information</td><td style="padding:8px 6px;font-size:11px;color:#1A7A47">primary=C5_compliance_boundary_integrity; also=S1_R2_unsupported_</td></tr><tr class="airi-covered" data-domain="6" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">72.04.02</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Market Concentration and Infrastructure Dependencies:</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A"></td><td style="padding:8px 6px;font-size:11px;color:#1A7A47">primary=R2R_D5_single_external_service_dependency | R2R_D5_single</td></tr><tr class="airi-gaps" data-domain="2" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">65.03.03</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Reidentification</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">2.1</td><td style="padding:8px 6px;font-size:11px;color:#C07B10">CC-3 catches shallow validators; dedicated reidentify() API expos</td></tr><tr class="airi-gaps" data-domain="3" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">70.02.02</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Misinformation — hallucination of clinical knowledge</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">3.1</td><td style="padding:8px 6px;font-size:11px;color:#C07B10">CC-1 catches threshold=0.0 default; actual output-level hallucina</td></tr><tr class="airi-gaps" data-domain="7" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">39.25.00</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Verifiability — black-box AI in medical healthcare</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">7.4</td><td style="padding:8px 6px;font-size:11px;color:#C07B10">B2 detects surface language only; Model Card / interpretability a</td></tr><tr class="airi-gaps" data-domain="1" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">11.02.00</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Allocative Harms — withheld resources in healthcare</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">1.1</td><td style="padding:8px 6px;font-size:11px;color:#C07B10">Subgroup performance disparities require dynamic evaluation; outs</td></tr><tr class="airi-gaps" data-domain="6" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 6px;font-size:11px;color:#5A6B80;font-family:monospace">72.04.02</td><td style="padding:8px 6px;font-size:12px;color:#0D1F3C;font-weight:500">Market Concentration — healthcare single-point failures</td><td style="padding:8px 6px;font-size:11px;color:#5B3D8A">6.1</td><td style="padding:8px 6px;font-size:11px;color:#C07B10">Systemic risk beyond single-repository scope.</td></tr></tbody></table></div></div></div></section>
<section id="s5"><h2 class="s-title">Evidence Detail <span class="tip-icon" data-tooltip="Full evidence ledger from all detectors. Filter by severity. Capped at 200 entries in HTML view." tabindex="0">?</span></h2><div class="panel"><div class="toggle-row" style="margin-bottom:14px"><span class="filter-chip active" data-sev="all" onclick="filterEv('all')">All (65)</span> <span class="filter-chip" data-sev="fail" onclick="filterEv('fail')">FAIL</span> <span class="filter-chip" data-sev="warn" onclick="filterEv('warn')">WARN</span> <span class="filter-chip" data-sev="pass" onclick="filterEv('pass')">PASS</span> <span class="filter-chip" data-sev="info" onclick="filterEv('info')">INFO</span></div><div class="muted" style="margin:0 0 10px 0">Showing 56 compact rows from the first 65 evidence entries.</div><div style="overflow-x:auto"><table style="width:100%;border-collapse:collapse"><thead><tr style="background:#F8FAFC"><th style="padding:8px 5px;width:16px"></th><th style="padding:8px 5px;font-size:11px;text-align:left;color:#5A6B80">SEV</th><th style="padding:8px 5px;font-size:11px;text-align:left;color:#5A6B80">Detector</th><th style="padding:8px 5px;font-size:11px;text-align:left;color:#5A6B80">Finding</th><th style="padding:8px 5px;font-size:11px;text-align:left;color:#5A6B80">File</th></tr></thead><tbody><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_clinical_boundary</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_clinical_boundary.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_H1_clinical_certainty_hype</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_H1_clinical_certainty_hype.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_H2_regulatory_approval_hype</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_H2_regulatory_approval_hype.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_H3_autonomous_replacement_hyp</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_H3_autonomous_replacement_hype.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_H4_breakthrough_marketing_hyp</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_H4_breakthrough_marketing_hype.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_H5_universal_generalization_h</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_H5_universal_generalization_hype.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_H6_perfect_accuracy_hype</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_H6_perfect_accuracy_hype.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_R1_limitations_section</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_R1_limitations_section.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_R2_regulatory_framework</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_R2_regulatory_framework.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_R4_demographic_bias_boundary</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_R4_demographic_bias_boundary.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_R5_reproducibility_provisions</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S1_R5_reproducibility_provisions.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_T1_workflow_files</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S3_T1_workflow_files.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_T2_domain_tests</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S3_T2_domain_tests.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_T3_changelog_release_hygiene</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S3_T3_changelog_release_hygiene.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_T3_changelog_bugfix_evidence</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S3_T3_changelog_bugfix_evidence.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_B2_bias_limitations</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S3_B2_bias_limitations.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_B2_measurement_evidence</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S3_B2_measurement_evidence.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">C1_hardcoded_credentials</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No hardcoded credential evidence detected for C1_hardcoded_credentials.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">C2_dependency_pinning</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No loose dependency evidence detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">C3_dead_or_deprecated_patient_ad</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for C3_dead_or_deprecated_patient_adjacent_paths.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">C4_exception_handling_clinical_a</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No fail-open exception handler detected in executable Python code.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">BIO_smiles_surface_integrity</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No malformed or suspicious SMILES-like strings detected by conservative surface checks.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">BIO_smiles_rdkit_validation</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">RDKit optional validation lane not exercised because no SMILES-like candidates were detect</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">BIO_smiles_parser_guard</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No missing None/invalid guards detected after SMILES parser calls.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">BIO_silent_mock_fallback</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No silent mock or simulated-data fallback patterns detected in production code paths.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">BIO_trace_manifest</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No traceability manifest or runtime audit-log schema surface detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">BIO_run_trace</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No risky subprocess or os.system bio-tool execution patterns detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_make_reproduce_target</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No Makefile detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_readme_reproducibility_sectio</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">README exists but no reproducibility or replication section heading was detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_checksum_files</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S4_checksum_files.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_dataset_url</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Documentation exists but no dataset URL or data source URL was detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_model_weight_url_or_checksum</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Documentation exists but no model artifact URL/checksum evidence was detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_citation_cff</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S4_citation_cff.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_license_restriction</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">License/readme/docs surfaces exist but no restriction language was detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_cli_entrypoint</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No package metadata or Python AST surface detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_seed_setting</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No deterministic seed setting evidence detected by AST summary.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_runnable_examples</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">No evidence detected for S4_runnable_examples.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_readme_bio_terms</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">README exposes bio/medical vocabulary.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_R2_weak_regulatory_self_asser</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Self-asserted privacy/compliance language detected without stronger regulatory-framework e</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-warn" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#C07B10"></span></td><td style="padding:8px 5px;font-size:11px;color:#C07B10;font-weight:700">WARN</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S1_R2_unsupported_legal_or_compl</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Legal, privacy, or compliance claim detected without supporting governance or security-gro</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_B1_dependency_manifest</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Dependency or environment manifest exists.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">package-lock.json</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_B1_dependency_manifest</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Dependency or environment manifest exists.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">package.json</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_B1_dependency_manifest</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Dependency or environment manifest exists.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">pnpm-lock.yaml</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_B1_data_source_language</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Data source, dataset citation, IRB, or provenance language detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S3_B3_coi_funding</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">COI, funding, sponsor, or acknowledgement language detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S2_package_bio_terms</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Package metadata exposes bio/medical vocabulary.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">package.json</td></tr><tr class="ev-row ev-warn" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#C07B10"></span></td><td style="padding:8px 5px;font-size:11px;color:#C07B10;font-weight:700">WARN</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">R2R_D5_single_external_service_d</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Required external service API key detected for a named workflow dependency. Aggregated 2 m</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.env.example</td></tr><tr class="ev-row ev-warn" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#C07B10"></span></td><td style="padding:8px 5px;font-size:11px;color:#C07B10;font-weight:700">WARN</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">R2R_D5_single_external_service_d</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Named external service provider is presented as part of the core repository workflow. Aggr</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-warn" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#C07B10"></span></td><td style="padding:8px 5px;font-size:11px;color:#C07B10;font-weight:700">WARN</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">R2R_D5_single_external_service_d</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Local or self-host claims coexist with required external service dependencies. Aggregated </td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-warn" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#C07B10"></span></td><td style="padding:8px 5px;font-size:11px;color:#C07B10;font-weight:700">WARN</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">C6_mock_auth_or_fail_open_bounda</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Mock-auth, auto-login, or no-auth local/self-host boundary surfaced in reviewed sources. A</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">README.md</td></tr><tr class="ev-row ev-warn" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#C07B10"></span></td><td style="padding:8px 5px;font-size:11px;color:#C07B10;font-weight:700">WARN</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">C6_mock_auth_or_fail_open_bounda</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Local or self-host claims coexist with mock-auth or auto-login boundary signals. Aggregate</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">.env.example</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_container_environment</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Container or compose file exists.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">Dockerfile</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_environment_lock_evidence</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Environment, dependency, or lock manifest detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">package-lock.json</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_environment_lock_evidence</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Environment, dependency, or lock manifest detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">pnpm-lock.yaml</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_exact_dependency_pins_or_hash</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Lock manifest with exact dependency resolution detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">package-lock.json</td></tr><tr class="ev-row ev-info" style="border-bottom:1px solid #E4EBF5"><td style="padding:8px 5px;width:16px"><span style="display:block;width:8px;height:8px;border-radius:50%;background:#5A6B80"></span></td><td style="padding:8px 5px;font-size:11px;color:#5A6B80;font-weight:700">INFO</td><td style="padding:8px 5px;font-size:11px;color:#5B3D8A;font-family:monospace">S4_exact_dependency_pins_or_hash</td><td style="padding:8px 5px;font-size:12px;color:#0D1F3C">Lock manifest with exact dependency resolution detected.</td><td style="padding:8px 5px;font-size:11px;color:#5A6B80">pnpm-lock.yaml</td></tr></tbody></table></div></div></section>
<div class="footer">
  STEM BIO-AI Local CLI Scan &nbsp;|&nbsp; 1.8.0
  &nbsp;|&nbsp; Deterministic surface scan &mdash; no LLM, network, or runtime execution.
</div>
</div>
<script>
function toggleCard(card) {
  var d = card.querySelector('.card-detail');
  var exp = card.classList.toggle('expanded');
  card.setAttribute('aria-expanded', String(exp));
  if (d) d.style.display = exp ? 'block' : 'none';
}

var _airiView = 'covered';
var _airiDomain = 0;

function _updateAiriToggleLabels() {
  var covered = 0;
  var gaps = 0;
  var card = document.querySelector('.domain-card[data-domain="' + _airiDomain + '"]');
  if (card) {
    covered = parseInt(card.dataset.covered || '0', 10);
    gaps = parseInt(card.dataset.gaps || '0', 10);
  } else {
    var allCard = document.querySelector('.domain-card[data-domain="0"]');
    covered = parseInt(allCard?.dataset.covered || '0', 10);
    gaps = parseInt(allCard?.dataset.gaps || '0', 10);
  }
  document.querySelectorAll('.toggle-btn[data-view]').forEach(function(b) {
    if (b.dataset.view === 'covered') b.textContent = 'Covered (' + covered + ')';
    if (b.dataset.view === 'gaps') b.textContent = 'Gaps (' + gaps + ')';
  });
}

function _applyAiriFilter() {
  document.querySelectorAll('.airi-covered,.airi-gaps').forEach(function(r) {
    var viewOk = r.classList.contains('airi-' + _airiView);
    var domainOk = (_airiDomain === 0 || r.dataset.domain == _airiDomain);
    r.style.display = (viewOk && domainOk) ? '' : 'none';
  });
  _updateAiriToggleLabels();
}

function airiToggle(view) {
  _airiView = view;
  _applyAiriFilter();
  document.querySelectorAll('.toggle-btn[data-view]').forEach(function(b) {
    b.classList.toggle('active', b.dataset.view === view);
  });
}

function filterDomain(num) {
  _airiDomain = (_airiDomain === num) ? 0 : num;
  document.querySelectorAll('.domain-card').forEach(function(c) {
    var active = (c.dataset.domain == _airiDomain);
    c.classList.toggle('domain-active', active);
    c.style.setProperty('--d-color', active ? c.querySelector('.domain-num').style.background : '');
  });
  _applyAiriFilter();
}

function filterEv(sev) {
  document.querySelectorAll('.ev-row').forEach(function(r) {
    r.style.display = (sev === 'all' || r.classList.contains('ev-' + sev)) ? '' : 'none';
  });
  document.querySelectorAll('.filter-chip').forEach(function(c) {
    c.classList.toggle('active', c.dataset.sev === sev);
  });
}

function updateNav() {
  var cur = '';
  document.querySelectorAll('section[id]').forEach(function(s) {
    if (window.scrollY >= s.offsetTop - 88) cur = s.id;
  });
  document.querySelectorAll('.nav-link').forEach(function(l) {
    l.classList.toggle('active', l.getAttribute('href') === '#' + cur);
  });
}

window.addEventListener('scroll', updateNav, { passive: true });

document.addEventListener('DOMContentLoaded', function() {
  updateNav();
  airiToggle('covered');
  filterEv('all');
  document.querySelectorAll('.card').forEach(function(c) {
    c.addEventListener('keydown', function(e) {
      if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); toggleCard(c); }
    });
  });
});
</script>
</body>
</html>