Spaces:
Sleeping
Sleeping
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width,initial-scale=1"> | |
| <title>STEM BIO-AI — 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 | 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 | 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 | 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 & 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">⌄</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">⌄</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">⌄</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">⌄</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">⌄</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">⌄</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">⌄</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">⌄</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">⌄</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 | 1.8.0 | |
| | Deterministic surface scan — 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> | |