1<!DOCTYPE html> 2<html lang="en"> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1.0"> 6<title>ETA Glossary â Ethical Technology Assessment · OpenTEAM</title> 7<link rel="preconnect" href="https://fonts.googleapis.com"> 8<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=DM+Mono:wght@300;400;500&family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap" rel="stylesheet"> 9<style> 10/* ââ RESET & BASE âââââââââââââââââââââââââââââââââââââââ */ 11*,*::before,*::after{box-sizing:border-box;margin:0;padding:0} 12:root{ 13 --ink:#1c1c1a; 14 --ink-dim:#5a5a54; 15 --ink-faint:#9a9a92; 16 --cream:#f5f0e8; 17 --cream-dk:#ede6d8; 18 --cream-dkr:#e2d9c8; 19 --white:#ffffff; 20 --forest:#1b4332; 21 --forest-md:#2d6a4f; 22 --forest-lt:#74c69d; 23 --forest-pale:#d8f3dc; 24 --sage:#52796f; 25 --sage-lt:#84a98c; 26 --gold:#b5892a; 27 --gold-lt:#e9c46a; 28 --gold-pale:#fdf5d9; 29 --rust:#9b3a1a; 30 --rust-pale:#fde8e0; 31 --sky:#1d4e89; 32 --sky-pale:#dbeafe; 33 --line:#d5cec0; 34 --line-dk:#b8b0a0; 35 --shadow:0 2px 16px rgba(27,67,50,.09); 36 --shadow-lg:0 8px 40px rgba(27,67,50,.14); 37 --r:8px; 38} 39html{scroll-behavior:smooth;font-size:16px} 40body{background:var(--cream);color:var(--ink);font-family:'DM Sans',sans-serif;line-height:1.6;min-height:100vh} 41 42/* ââ TOPBAR âââââââââââââââââââââââââââââââââââââââ */ 43.topbar{ 44 position:sticky;top:0;z-index:100; 45 background:var(--forest); 46 border-bottom:3px solid #0d2818; 47 box-shadow:0 2px 20px rgba(0,0,0,.3); 48 padding:0; 49} 50.topbar-inner{ 51 max-width:1100px;margin:0 auto; 52 display:flex;align-items:stretch;justify-content:space-between; 53 padding:0 24px; 54} 55.brand{ 56 display:flex;align-items:center;gap:12px; 57 text-decoration:none;padding:14px 0; 58} 59.brand-logo{ 60 width:36px;height:36px;background:rgba(255,255,255,.12); 61 border-radius:6px;display:flex;align-items:center;justify-content:center; 62 font-family:'DM Mono',monospace;font-size:13px;font-weight:500;color:var(--forest-lt); 63 letter-spacing:.02em;flex:0 0 36px; 64} 65.brand-text{ 66 display:flex;flex-direction:column; 67} 68.brand-name{ 69 font-family:'DM Sans',sans-serif;font-size:14px;font-weight:600;color:white; 70 letter-spacing:.01em;line-height:1; 71} 72.brand-sub{ 73 font-family:'DM Mono',monospace;font-size:9.5px;color:rgba(255,255,255,.5); 74 letter-spacing:.12em;text-transform:uppercase;margin-top:3px; 75} 76.topbar-nav{display:flex;align-items:stretch;gap:0} 77.topbar-nav a{ 78 font-family:'DM Mono',monospace;font-size:10px;font-weight:500; 79 letter-spacing:.12em;text-transform:uppercase; 80 color:rgba(255,255,255,.6);text-decoration:none; 81 padding:0 16px;display:flex;align-items:center; 82 border-left:1px solid rgba(255,255,255,.1); 83 transition:color .15s,background .15s; 84} 85.topbar-nav a:hover{color:white;background:rgba(255,255,255,.08)} 86.topbar-nav a.active{color:var(--forest-lt)} 87 88/* ââ HERO âââââââââââââââââââââââââââââââââââââââ */ 89.hero{ 90 background:linear-gradient(155deg, var(--forest) 0%, #0d4a2a 60%, #163d25 100%); 91 padding:64px 24px 56px; 92 position:relative;overflow:hidden; 93} 94.hero::before{ 95 content:'';position:absolute;inset:0; 96 background:url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.02'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); 97} 98.hero-inner{max-width:1100px;margin:0 auto;position:relative} 99.hero-badge{ 100 display:inline-flex;align-items:center;gap:8px; 101 background:rgba(116,198,157,.15);border:1px solid rgba(116,198,157,.3); 102 border-radius:20px;padding:5px 14px; 103 font-family:'DM Mono',monospace;font-size:10px;font-weight:500; 104 letter-spacing:.12em;text-transform:uppercase;color:var(--forest-lt); 105 margin-bottom:20px; 106} 107.hero-badge::before{content:'â';font-size:8px} 108.hero h1{
109 font-family:'DM Serif Display',serif; 110 font-size:clamp(2.2rem,5vw,3.6rem); 111 font-weight:400;color:white;line-height:1.1; 112 letter-spacing:-.02em;margin-bottom:8px; 113} 114.hero h1 em{font-style:italic;color:var(--forest-lt)} 115.hero-sub{ 116 font-size:17px;color:rgba(255,255,255,.65); 117 max-width:580px;line-height:1.6;margin-bottom:32px; 118} 119.hero-meta{ 120 display:flex;flex-wrap:wrap;gap:20px;align-items:center; 121 font-family:'DM Mono',monospace;font-size:10.5px;color:rgba(255,255,255,.4); 122 letter-spacing:.08em;text-transform:uppercase; 123} 124.hero-meta span{display:flex;align-items:center;gap:6px} 125.hero-meta span::before{ 126 content:'';width:6px;height:6px;border-radius:50%; 127 background:var(--forest-lt);flex:0 0 6px; 128} 129 130/* ââ SEARCH & FILTERS âââââââââââââââââââââââââââââââââââââââ */ 131.controls-bar{ 132 background:var(--white); 133 border-bottom:1px solid var(--line); 134 padding:16px 24px; 135 position:sticky;top:67px;z-index:90; 136 box-shadow:0 2px 8px rgba(0,0,0,.05); 137} 138.controls-inner{ 139 max-width:1100px;margin:0 auto; 140 display:flex;gap:12px;flex-wrap:wrap;align-items:center; 141} 142.search-wrap{position:relative;flex:1;min-width:240px} 143.search-wrap svg{ 144 position:absolute;left:12px;top:50%;transform:translateY(-50%); 145 width:16px;height:16px;stroke:var(--ink-faint);fill:none; 146 pointer-events:none; 147} 148#search-input{ 149 width:100%;padding:10px 14px 10px 38px; 150 border:1.5px solid var(--line);border-radius:var(--r); 151 font-family:'DM Sans',sans-serif;font-size:14px;color:var(--ink); 152 background:var(--cream);outline:none;transition:border .15s,box-shadow .15s; 153} 154#search-input:focus{border-color:var(--forest-md);box-shadow:0 0 0 3px var(--forest-pale)} 155.filter-pills{display:flex;flex-wrap:wrap;gap:6px;align-items:center} 156.filter-pill{ 157 display:inline-flex;align-items:center;gap:5px; 158 padding:6px 14px;border-radius:20px; 159 font-family:'DM Mono',monospace;font-size:10px;font-weight:500; 160 letter-spacing:.09em;text-transform:uppercase; 161 border:1.5px solid var(--line);background:transparent; 162 cursor:pointer;transition:all .15s;color:var(--ink-dim); 163} 164.filter-pill:hover{border-color:var(--forest-md);color:var(--forest)} 165.filter-pill.active{background:var(--forest);border-color:var(--forest);color:white} 166.filter-pill .dot{ 167 width:7px;height:7px;border-radius:50%;flex:0 0 7px; 168} 169.count-badge{ 170 font-family:'DM Mono',monospace;font-size:11px;color:var(--ink-faint); 171 margin-left:auto;white-space:nowrap; 172} 173 174/* ââ LAYOUT âââââââââââââââââââââââââââââââââââââââ */ 175.page-body{ 176 max-width:1100px;margin:0 auto; 177 display:grid;grid-template-columns:220px 1fr; 178 gap:0;padding:32px 24px 80px; 179 align-items:start; 180} 181@media(max-width:768px){.page-body{grid-template-columns:1fr}} 182 183/* ââ ALPHA SIDEBAR âââââââââââââââââââââââââââââââââââââââ */ 184.alpha-nav{ 185 position:sticky;top:130px; 186 display:flex;flex-direction:column;gap:2px; 187 padding-right:24px; 188} 189.alpha-nav a{ 190 font-family:'DM Mono',monospace;font-size:11px;font-weight:500; 191 letter-spacing:.12em;text-transform:uppercase; 192 color:var(--ink-faint);text-decoration:none; 193 padding:5px 10px;border-radius:5px; 194 transition:all .12s;display:flex;align-items:center;gap:8px; 195} 196.alpha-nav a:hover{background:var(--cream-dk);color:var(--forest)} 197.alpha-nav a.active{background:var(--forest-pale);color:var(--forest);font-weight:600} 198.alpha-nav a .alpha-count{ 199 margin-left:auto;font-size:10px;color:var(--ink-faint); 200} 201.alpha-section-label{ 202 font-family:'DM Mono',monospace;font-size:9px; 203 letter-spacing:.15em;text-transform:uppercase; 204 color:var(--line-dk);padding:10px 10px 4px; 205} 206@media(max-width:768px){.alpha-nav{display:none}} 207 208/* ââ GLOSSARY LIST âââââââââââââââââââââââââââââââââââââââ */ 209.glossary-main{} 210.letter-section{margin-bottom:48px} 211.letter-anchor{ 212 display:flex;align-items:center;gap:14px;margin-bottom:20px; 213} 214.letter-glyph{
215 font-family:'DM Serif Display',serif; 216 font-size:52px;font-weight:400; 217 color:var(--line-dk);line-height:1; 218 flex:0 0 44px; 219} 220.letter-rule{flex:1;height:1px;background:var(--line)} 221 222/* ââ TERM CARD âââââââââââââââââââââââââââââââââââââââ */ 223.term-card{ 224 background:var(--white); 225 border:1px solid var(--line); 226 border-radius:var(--r); 227 margin-bottom:12px; 228 overflow:hidden; 229 transition:box-shadow .15s,border-color .15s; 230} 231.term-card:hover{ 232 box-shadow:var(--shadow); 233 border-color:var(--line-dk); 234} 235.term-card.hidden{display:none} 236 237.term-header{ 238 display:flex;align-items:flex-start;gap:14px; 239 padding:18px 20px 14px; 240 cursor:pointer; 241 user-select:none; 242} 243.term-accent{ 244 width:36px;height:36px;border-radius:6px; 245 flex:0 0 36px; 246 display:flex;align-items:center;justify-content:center; 247 font-size:17px; 248 margin-top:1px; 249} 250.term-header-text{flex:1;min-width:0} 251.term-name{ 252 font-family:'DM Serif Display',serif; 253 font-size:19px;font-weight:400; 254 color:var(--ink);line-height:1.2; 255 margin-bottom:4px; 256 letter-spacing:-.01em; 257} 258.term-def{ 259 font-size:13.5px;color:var(--ink-dim); 260 line-height:1.55;display:-webkit-box; 261 -webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden; 262} 263.term-def.expanded{-webkit-line-clamp:unset;overflow:visible} 264.term-tags{ 265 display:flex;flex-wrap:wrap;gap:5px; 266 margin-top:8px; 267} 268.term-tag{ 269 display:inline-flex;align-items:center; 270 padding:2px 9px;border-radius:12px; 271 font-family:'DM Mono',monospace;font-size:9.5px;font-weight:500; 272 letter-spacing:.08em;text-transform:uppercase; 273} 274.tag-eta{background:var(--forest-pale);color:var(--forest-md);border:1px solid rgba(45,106,79,.2)} 275.tag-dtap{background:var(--gold-pale);color:var(--gold);border:1px solid rgba(181,137,42,.2)} 276.tag-fair{background:var(--sky-pale);color:var(--sky);border:1px solid rgba(29,78,137,.2)} 277.tag-gdpr{background:var(--rust-pale);color:var(--rust);border:1px solid rgba(155,58,26,.2)} 278.tag-role{background:#f0e8ff;color:#5b21b6;border:1px solid rgba(91,33,182,.2)} 279.tag-data{background:var(--cream-dkr);color:var(--ink-dim);border:1px solid var(--line)} 280 281.term-toggle{ 282 flex:0 0 28px;width:28px;height:28px; 283 border-radius:50%;border:1.5px solid var(--line); 284 background:transparent;cursor:pointer; 285 display:flex;align-items:center;justify-content:center; 286 transition:all .15s;margin-top:4px; 287} 288.term-toggle svg{ 289 width:10px;height:10px;stroke:var(--ink-dim);fill:none; 290 transition:transform .2s; 291} 292.term-card.open .term-toggle svg{transform:rotate(180deg)} 293.term-card.open .term-toggle{border-color:var(--forest-md);background:var(--forest-pale)} 294.term-card.open .term-toggle svg{stroke:var(--forest)} 295 296/* ââ EXPANDED BODY âââââââââââââââââââââââââââââââââââââââ */ 297.term-body{ 298 display:none; 299 border-top:1px solid var(--line); 300 background:var(--cream); 301} 302.term-card.open .term-body{display:block} 303.term-body-inner{ 304 padding:20px; 305 display:grid;grid-template-columns:1fr 1fr; 306 gap:16px; 307} 308@media(max-width:600px){.term-body-inner{grid-template-columns:1fr}} 309 310.detail-block{ 311 background:var(--white); 312 border:1px solid var(--line); 313 border-radius:6px; 314 padding:14px 16px; 315} 316.detail-block.full{grid-column:1/-1} 317.detail-label{ 318 font-family:'DM Mono',monospace;font-size:9px;font-weight:500; 319 letter-spacing:.14em;text-transform:uppercase; 320 color:var(--ink-faint);margin-bottom:6px; 321 display:flex;align-items:center;gap:6px; 322} 323.detail-label::before{ 324 content:'';width:3px;height:3px;border-radius:50%; 325 background:var(--forest-lt);flex:0 0 3px; 326} 327.detail-content{font-size:13px;color:var(--ink-dim);line-height:1.6} 328.detail-content a{color:var(--forest-md);text-decoration:none} 329.detail-content a:hover{text-decoration:underline} 330.detail-content strong{color:var(--ink);font-weight:600} 331.detail-content p{margin-bottom:8px} 332.detail-content p:last-child{margin:0} 333 334/* Related terms pills */ 335.related-pill{ 336 display:inline-flex;align-items:center; 337 padding:3px 10px;margin:2px; 338 border-radius:12px; 339 font-family:'DM Mono',monospace;font-size:10px; 340 background:var(--forest-pale);color:var(--forest-md); 341 border:1px solid rgba(45,106,79,.2); 342 cursor:pointer;text-decoration:none; 343 transition:background .12s; 344} 345.related-pill:hover{background:var(--forest-pale);border-color:var(--forest-md)} 346 347/* ETA score indicator strip */ 348.eta-strip{ 349 background:linear-gradient(90deg, var(--forest), var(--sage)); 350 height:3px; 351 border-radius:0 0 2px 2px; 352} 353 354/* ââ VERSION BANNER âââââââââââââââââââââââââââââââââââââââ */ 355.version-banner{ 356 background:var(--gold-pale); 357 border:1px solid rgba(181,137,42,.25); 358 border-radius:var(--r); 359 padding:14px 18px; 360 margin-bottom:24px; 361 display:flex;align-items:center;gap:14px; 362 font-size:13px; 363} 364.version-banner .vb-icon{ 365 width:32px;height:32px;flex:0 0 32px; 366 border-radius:6px;background:var(--gold); 367 display:flex;align-items:center;justify-content:center; 368 color:white;font-size:16px; 369} 370.version-banner .vb-text{flex:1} 371.version-banner .vb-label{ 372 font-family:'DM Mono',monospace;font-size:9.5px;font-weight:500; 373 letter-spacing:.12em;text-transform:uppercase; 374 color:var(--gold);margin-bottom:2px; 375} 376.version-banner .vb-desc{color:var(--ink-dim)} 377 378/* ââ EMPTY STATE âââââââââââââââââââââââââââââââââââââââ */ 379.empty-state{ 380 text-align:center;padding:60px 20px; 381 color:var(--ink-faint); 382 display:none; 383} 384.empty-state.visible{display:block} 385.empty-state-icon{font-size:48px;margin-bottom:16px;opacity:.3}
386.empty-state h3{font-family:'DM Serif Display',serif;font-size:22px;font-weight:400;color:var(--ink-dim);margin-bottom:8px} 387 388/* ââ FOOTER âââââââââââââââââââââââââââââââââââââââ */ 389footer{ 390 background:var(--forest); 391 padding:32px 24px; 392 margin-top:40px; 393} 394.foot-inner{ 395 max-width:1100px;margin:0 auto; 396 display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px; 397 font-family:'DM Mono',monospace;font-size:10.5px; 398 color:rgba(255,255,255,.4); 399} 400.foot-inner a{color:rgba(255,255,255,.6);text-decoration:none} 401.foot-inner a:hover{color:white} 402 403/* ââ SCROLL ANIMATION âââââââââââââââââââââââââââââââââââââââ */ 404@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}} 405.term-card{animation:fadeUp .3s ease both} 406.letter-section:nth-child(1) .term-card{animation-delay:.05s} 407.letter-section:nth-child(2) .term-card{animation-delay:.1s} 408 409/* ââ HIGHLIGHT MATCH âââââââââââââââââââââââââââââââââââââââ */ 410.hl{background:var(--gold-pale);border-radius:2px;color:var(--gold)} 411</style> 412</head> 413<body> 414 415<!-- TOPBAR --> 416<nav class="topbar" aria-label="Site navigation"> 417 <div class="topbar-inner"> 418 <a class="brand" href="#"> 419 <div class="brand-logo">OT</div> 420 <div class="brand-text"> 421 <span class="brand-name">OpenTEAM</span> 422 <span class="brand-sub">ETA Glossary</span> 423 </div> 424 </a> 425 <div class="topbar-nav"> 426 <a href="#" class="active">Glossary</a> 427 <a href="eta_unified.html">ETA Tool</a> 428 <a href="https://openteam-agreements.community/TermsandDefinitions/" target="_blank">Full Glossary</a> 429 </div> 430 </div> 431</nav> 432 433<!-- HERO --> 434<header class="hero"> 435 <div class="hero-inner"> 436 <div class="hero-badge">ETA Framework v1.0</div> 437 <h1>Ethical Technology<br><em>Assessment Glossary</em></h1> 438 <p class="hero-sub">Key terms and definitions for the ETA & DTAP frameworks â covering transparency, data sovereignty, commons fit, interoperability, and assessment methodology.</p> 439 <div class="hero-meta"> 440 <span>37 Terms Defined</span> 441 <span>ETA + DTAP Frameworks</span> 442 <span>OpenTEAM · Ag Knowledge Concordance</span> 443 </div> 444 </div> 445</header> 446 447<!-- CONTROLS --> 448<div class="controls-bar" role="search"> 449 <div class="controls-inner"> 450 <div class="search-wrap"> 451 <svg viewBox="0 0 24 24" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg> 452 <input type="text" id="search-input" placeholder="Search terms, definitions, tagsâ¦" aria-label="Search glossary"> 453 </div> 454 <div class="filter-pills" role="group" aria-label="Filter by framework"> 455 <button class="filter-pill active" data-filter="all">All</button> 456 <button class="filter-pill" data-filter="eta"><span class="dot" style="background:#2d6a4f"></span>ETA</button> 457 <button class="filter-pill" data-filter="dtap"><span class="dot" style="background:#b5892a"></span>DTAP</button> 458 <button class="filter-pill" data-filter="fair"><span class="dot" style="background:#1d4e89"></span>FAIR</button> 459 <button class="filter-pill" data-filter="role"><span class="dot" style="background:#5b21b6"></span>Roles</button> 460 </div> 461 <span class="count-badge" id="count-badge">37 terms</span> 462 </div> 463</div> 464 465<!-- PAGE BODY --> 466<div class="page-body"> 467 468 <!-- ALPHA NAV --> 469 <nav class="alpha-nav" aria-label="Alphabetical navigation"> 470 <div class="alpha-section-label">Jump to</div> 471 <a href="#letter-A" data-letter="A">A <span class="alpha-count"></span></a> 472 <a href="#letter-C" data-letter="C">C <span class="alpha-count"></span></a> 473 <a href="#letter-D" data-letter="D">D <span class="alpha-count"></span></a> 474 <a href="#letter-E" data-letter="E">E <span class="alpha-count"></span></a> 475 <a href="#letter-F" data-letter="F">F <span class="alpha-count"></span></a> 476 <a href="#letter-G" data-letter="G">G <span class="alpha-count"></span></a> 477 <a href="#letter-I" data-letter="I">I <span class="alpha-count"></span></a> 478 <a href="#letter-L" data-letter="L">L <span class="alpha-count"></span></a> 479 <a href="#letter-M" data-letter="M">M <span class="alpha-count"></span></a> 480 <a href="#letter-O" data-letter="O">O <span class="alpha-count"></span></a> 481 <a href="#letter-P" data-letter="P">
481P <span class="alpha-count"></span></a> 482 <a href="#letter-R" data-letter="R">R <span class="alpha-count"></span></a> 483 <a href="#letter-S" data-letter="S">S <span class="alpha-count"></span></a> 484 <a href="#letter-T" data-letter="T">T <span class="alpha-count"></span></a> 485 <a href="#letter-V" data-letter="V">V <span class="alpha-count"></span></a> 486 </nav> 487 488 <!-- GLOSSARY TERMS --> 489 <main class="glossary-main" id="glossary-main"> 490 491 <div class="version-banner"> 492 <div class="vb-icon">ð</div> 493 <div class="vb-text"> 494 <div class="vb-label">Version 1.0 · February 2026</div> 495 <div class="vb-desc">Terms specific to the Ethical Technology Assessment (ETA) and Data Trust Assessment Protocol (DTAP) frameworks. For the full OpenTEAM Ag Data Glossary, see the <a href="openteam-glossary.html">complete glossary</a>.</div> 496 </div> 497 </div> 498 499 <div id="glossary-content"></div> 500 <div class="empty-state" id="empty-state"> 501 <div class="empty-state-icon">ð</div> 502 <h3>No matching terms</h3> 503 <p>Try a different search or clear your filters.</p> 504 </div> 505 </main> 506</div> 507 508<footer> 509 <div class="foot-inner"> 510 <span>OpenTEAM · ETA Glossary v1.0 · February 2026</span> 511 <div style="display:flex;gap:20px"> 512 <a href="eta_unified.html">ETA Tool</a> 513 <a href="openteam-glossary.html">Full Glossary</a> 514 <a href="https://openteam-agreements.community/" target="_blank">openteam-agreements.community</a> 515 </div> 516 </div> 517</footer> 518
519<script> 520// ââ GLOSSARY DATA ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 521const TERMS = [ 522 { 523 letter: "A", 524 name: "Accessible (FAIR Principle)", 525 emoji: "ð", 526 accentBg: "#dbeafe", 527 tags: ["fair"], 528 shortDef: "There should be clear means of viewing and using data, metadata, or infrastructure. Once found, data should be retrievable via open, standardized protocols.", 529 altDefs: "The FAIR Principles: 'Once the user finds the required data, they need to know how they can be accessed.' Protocols must be open, free, and universally implementable (A1.1). Metadata must remain accessible even when data is no longer available (A2).", 530 agExample: "Data should be 'As Open as Possible, As Closed as Necessary.' In ETA assessments, G2 (Rights & Control) evaluates whether a tool's outputs and data are accessible without unjustified lock-in.", 531 etaRelevance: "Central to Gate G2 â Rights & Control. Tools must not require proprietary viewers or lock farmers into closed data formats to pass ETA review.", 532 related: ["Findable (FAIR)","Interoperable (FAIR)","Reusable (FAIR)","Open Data","Data Portability","G2 Rights & Control"], 533 refs: ["https://www.go-fair.org/fair-principles/"], 534 steward: "GO FAIR", 535 framework: ["fair","eta"] 536 }, 537 { 538 letter: "A", 539 name: "Accountability", 540 emoji: "âï¸", 541 accentBg: "#fde8e0", 542 tags: ["eta","gdpr"], 543 shortDef: "All parties involved in collection, storage, and use of agricultural data must be held responsible for their engagement in data management and subject to appropriate oversight.", 544 altDefs: "GDPR: accountability means to be 'responsible for, and be able to demonstrate compliance with' principles and regulations of data protection.", 545 agExample: "A software platform certified under ETA must demonstrate accountability through auditable logs, documented data flows, and a named point of contact â contributing to G4 (Stewardship).", 546 etaRelevance: "Directly scored in Gate G4 (Safety & Stewardship) and the Governance category of DTAP. Lack of a named contact or oversight process triggers a flag.", 547 related: ["Data Governance","Data Transparency","G4 Safety & Stewardship","Data Steward"], 548 refs: ["https://edps.europa.eu/data-protection/our-work/subjects/accountability_en"], 549 steward: "GDPR / EU AI Act", 550 framework: ["eta","dtap"] 551 }, 552 { 553 letter: "A", 554 name: "Accuracy", 555 emoji: "ð¯", 556 accentBg: "#d8f3dc", 557 tags: ["eta","gdpr"], 558 shortDef: "Ensuring that data collected, processed, and reported within a tool or dataset is correct, complete, and not misleading.", 559 altDefs: "UK GDPR Art. 5(1)(d): personal data shall be 'accurate and, where necessary, kept up to date; every reasonable step must be taken to ensure that inaccurate data is erased or rectified.'", 560 agExample: "In DTAP, accuracy is assessed under D2 (Provenance) â whether datasets document calibration methods, known error bounds, and correction protocols.", 561 etaRelevance: "Scored in D2 Provenance (DTAP) and flagged when documentation is insufficient to verify data quality. In ETA, inaccurate claims about tool capabilities may fail G1 (Transparency).", 562 related: ["Provenance","Data Quality","G1 Transparency","D2 Provenance"], 563 refs: ["https://ico.org.uk/for-organisations/guide-to-data-protection/"], 564 steward: "UK ICO / GDPR", 565 framework: ["eta","dtap"] 566 }, 567 { 568 letter: "C", 569 name: "Confidence Tier", 570 emoji: "ð ", 571 accentBg: "#fdf5d9", 572 tags: ["eta"], 573 shortDef: "A 3-level system in the ETA/DTAP framework indicating how independently a score has been validated. Tier 1 = self-assessed, Tier 2 = peer reviewed, Tier 3 = ecosystem steward / auditor.", 574 altDefs: "Each tier applies a score modifier: Steward self-assessment Ã0.92, Peer review Ã1.00, Auditor/ecosystem steward Ã1.04.", 575 agExample: "A farmOS deployment self-assessed at Score 78 becomes 71.8 at Tier 1 confidence. If peer-reviewed, it stays 78. If audited by an ecosystem steward, it becomes 81.", 576 etaRelevance: "Core to the ETA scoring system. Encourages external validation. Displayed on every published ETA/DTAP card.", 577 related: ["ETA Score","DTAP Score","Reviewer Role","Assessment Card"], 578 refs: [], 579 steward: "OpenTEAM / Ag Knowledge Concordance", 580 framework: ["eta","dtap"] 581 }, 582 { 583 letter: "C", 584 name: "Commons Fit", 585 emoji: "ð", 586 accentBg: "#d8f3dc", 587 tags: ["eta"], 588 shortDef: "A scored ETA category (0â5) measuring whether a tool supports shared infrastru
588cture, interoperability with open standards, and avoids creating data silos or proprietary lock-in.", 589 altDefs: "Commons Fit asks: Does this tool strengthen the agricultural data commons? Can communities build collective knowledge from it? Does it mesh with open protocols like ISOBUS, AgGateway, or LDP?", 590 agExample: "A soil sensor with a closed API that only connects to its own cloud platform scores low on Commons Fit. An open-source sensor with MQTT output and documented schemas scores high.", 591 etaRelevance: "One of 4 scored categories in ETA Hardware/Software (15 pts max). Also assessed in DTAP as the alignment of dataset licensing with open reuse.", 592 related: ["Interoperable (FAIR)","Open Source","Open Data","ETA Score","Lock-in"], 593 refs: [], 594 steward: "OpenTEAM", 595 framework: ["eta"] 596 }, 597 { 598 letter: "C", 599 name: "Consent", 600 emoji: "â", 601 accentBg: "#fde8e0", 602 tags: ["dtap","eta","gdpr"], 603 shortDef: "Freely given, specific, informed, and unambiguous agreement by a data subject to the collection, processing, or sharing of their data.", 604 altDefs: "GDPR: consent must be 'freely given, specific, informed and unambiguous.' In DTAP, D1 evaluates whether data collection from farmers or land stewards followed documented consent protocols.", 605 agExample: "A dataset compiled from farm sensor networks must document whether farmers consented to data aggregation, external sharing, or commercial use. Absent documentation scores 0 in D1 (Consent).", 606 etaRelevance: "First of 6 DTAP dimensions (D1 Consent, 10 pts). Also relevant to G2 (Rights & Control) in ETA, which checks for clear data control rights.", 607 related: ["Data Sovereignty","GDPR","CARE Principles","D1 Consent","G2 Rights & Control"], 608 refs: ["https://gdpr-info.eu/art-4-gdpr/"], 609 steward: "GDPR / OpenTEAM", 610 framework: ["dtap","eta"] 611 }, 612 { 613 letter: "D", 614 name: "Data Ethics", 615 emoji: "ð§", 616 accentBg: "#d8f3dc", 617 tags: ["eta"], 618 shortDef: "A scored ETA category for software (0â5) measuring whether a tool protects farmers' data rights, limits secondary use, and avoids exploitative data practices.", 619 altDefs: "Covers: purpose limitation, no unauthorized secondary sale of farm data, clear opt-out mechanisms, and alignment with farmer data sovereignty principles.", 620 agExample: "A farm management platform that sells anonymized farm data to input companies without farmer opt-out fails Data Ethics scoring and may fail Gate G3 (No Abuse).", 621 etaRelevance: "One of 4 scored categories in ETA Software (15 pts max). No equivalent in Hardware ETA â replaced by Resource Ethics.", 622 related: ["Data Sovereignty","Purpose Limitation","GDPR","G3 No Abuse","Data Minimization"], 623 refs: [], 624 steward: "OpenTEAM", 625 framework: ["eta"] 626 }, 627 { 628 letter: "D", 629 name: "Data Sovereignty", 630 emoji: "ð¡", 631 accentBg: "#f0e8ff", 632 tags: ["dtap","eta"], 633 shortDef: "A farmer's or community's ability to create, control, and manage their own data â including knowledge of and meaningful consent over how it is used by others.", 634 altDefs: "Closely related to Indigenous Data Sovereignty as defined by the CARE Principles. In agricultural contexts, extends to all land stewards regardless of Indigenous status.", 635 agExample: "A land steward who can export all their farm data in an open format at any time, revoke access, and view exactly what data a platform holds about them has meaningful data sovereignty.", 636 etaRelevance: "Central value underlying ETA Gate G2 (Rights & Control) and DTAP D1 (Consent) and D3 (Access). Tools that prevent data export or lock in data fail ETA review.", 637 related: ["Consent","Open Data","Data Portability","CARE Principles","G2 Rights & Control","D3 Access"], 638 refs: [], 639 steward: "OpenTEAM / Global Indigenous Data Alliance", 640 framework: ["dtap","eta"] 641 }, 642 { 643 letter: "D", 644 name: "DTAP Score", 645 emoji: "ð", 646 accentBg: "#fdf5d9", 647 tags: ["dtap"], 648 shortDef: "The 0â100 composite score produced by the Data Trust Assessment Protocol, averaging scores across 6 dimensions: Consent, Provenance, Acce
648ss, Machine-Readability, Longitudinal Integrity, and Governance.", 649 altDefs: "Calculated as: avg(Q1+Q2) à (100/30) à confidence_modifier for each dimension pair, then summed. Each dimension contributes up to ~16.7 points to the total.", 650 agExample: "A USDA open dataset with documented consent protocols, clear provenance, full public API, CSV format, 15-year history, and a named data steward might score 82â90 DTAP.", 651 etaRelevance: "The primary output of a DTAP assessment. Published alongside the dataset record in the OpenTEAM FAIR registry.", 652 related: ["Confidence Tier","D1 Consent","D2 Provenance","D3 Access","D4 Machine-Readability","D5 Longitudinal","D6 Governance"], 653 refs: [], 654 steward: "OpenTEAM / Ag Knowledge Concordance", 655 framework: ["dtap"] 656 }, 657 { 658 letter: "D", 659 name: "D1 â Consent Dimension", 660 emoji: "â ", 661 accentBg: "#fdf5d9", 662 tags: ["dtap"], 663 shortDef: "First DTAP dimension (10 pts). Evaluates whether data collection from individuals or communities followed documented, freely given, and revocable consent procedures.", 664 altDefs: "Q1: Is consent documented and accessible? Q2: Do subjects have the right to withdraw or limit future use?", 665 agExample: "A dataset where farmers agreed verbally but no written consent exists scores low. One with a signed data sharing agreement that includes opt-out provisions scores high.", 666 etaRelevance: "Scored 0â5 per question (Q1, Q2). Averaged to dimension score. Feeds into DTAP total.", 667 related: ["Consent","Data Sovereignty","DTAP Score","GDPR"], 668 refs: [], 669 steward: "OpenTEAM", 670 framework: ["dtap"] 671 }, 672 { 673 letter: "D", 674 name: "D2 â Provenance", 675 emoji: "ð", 676 accentBg: "#fdf5d9", 677 tags: ["dtap"], 678 shortDef: "Second DTAP dimension (10 pts). Evaluates whether the dataset's origin, collection methods, calibration history, and known error sources are documented.", 679 altDefs: "Q3: Is collection methodology documented? Q4: Are known errors, biases, or calibration issues disclosed?", 680 agExample: "A soil carbon dataset that documents sensor models, calibration dates, and identifies spatial gaps in coverage scores high on D2.", 681 etaRelevance: "Critical for datasets used in AI/ML training or policy analysis. Poor provenance inflates false precision.", 682 related: ["Accuracy","Metadata","DTAP Score","Machine Readable"], 683 refs: [], 684 steward: "OpenTEAM", 685 framework: ["dtap"] 686 }, 687 { 688 letter: "D", 689 name: "D3 â Access", 690 emoji: "ð", 691 accentBg: "#fdf5d9", 692 tags: ["dtap"], 693 shortDef: "Third DTAP dimension (10 pts). Evaluates whether data is accessible to the public, under clear licensing terms, and without prohibitive barriers to download or use.", 694 altDefs: "Q5: Is data publicly accessible (open or with free registration)? Q6: Is the license clearly stated and permissive for research use?", 695 agExample: "A USDA open-access database with a CC0 license scores high. A dataset requiring institutional purchase agreement scores low.", 696 etaRelevance: "Reflects FAIR Accessible principle and OpenTEAM's commitment to farmer data access.", 697 related: ["Accessible (FAIR)","Open Data","Data Sovereignty","D1 Consent","DTAP Score"], 698 refs: [], 699 steward: "OpenTEAM", 700 framework: ["dtap"] 701 }, 702 { 703 letter: "D", 704 name: "D4 â Machine-Readability", 705 emoji: "ð¤", 706 accentBg: "#fdf5d9", 707 tags: ["dtap"], 708 shortDef: "Fourth DTAP dimension (10 pts). Evaluates whether data is available in structured, machine-processable formats (CSV, JSON, GeoJSON, NetCDF) rather than PDF or paper only.", 709 altDefs: "Q7: Is data available in at least one structured format? Q8: Is an API or bulk download available?", 710 agExample: "A crop yield database available as PDFs only scores 0. One available as CSV with a REST API scores 10.", 711 etaRelevance: "Required for data to be usable in AI/ML pipelines, interoperability tools, or automated reporting. Scores feed directly into DTAP.", 712 related: ["Machine Readable","Interoperable (FAIR)","Open Data","API","DTAP Score"], 713 refs: [], 714 steward: "OpenTEAM", 715 framework: ["dtap"] 716 }, 717 { 718 letter: "D", 719 name: "D5 â Longitudinal Integrity", 720 emoji: "ð ", 721 accentBg: "#fdf5d9", 722 tags: ["dtap"], 723 shortDef: "Fifth DTAP dimension (10 pts). Evaluates whether the dataset spans sufficient time for trend anal
723ysis, and whether historical records are maintained consistently.", 724 altDefs: "Q9: Does the dataset span â¥5 years of consistent coverage? Q10: Are version history and data changes documented?", 725 agExample: "A 15-year soil health dataset with annual versioning and change logs scores high. A 2-year pilot dataset with no archiving scores low.", 726 etaRelevance: "Essential for climate-smart agriculture assessments, carbon accounting, and conservation practice evaluation.", 727 related: ["Metadata","Provenance","Data Governance","DTAP Score"], 728 refs: [], 729 steward: "OpenTEAM", 730 framework: ["dtap"] 731 }, 732 { 733 letter: "D", 734 name: "D6 â Governance", 735 emoji: "ðï¸", 736 accentBg: "#fdf5d9", 737 tags: ["dtap"], 738 shortDef: "Sixth DTAP dimension (10 pts). Evaluates whether a named steward, documented update protocol, and community feedback mechanism exist for the dataset.", 739 altDefs: "Q11: Is there a named data steward or custodian organization? Q12: Is there a documented process for corrections, feedback, or version updates?", 740 agExample: "USDA NASS CDL scores high: named steward, annual release process, and documented correction workflows. An orphaned research dataset with no current maintainer scores low.", 741 etaRelevance: "Governance without stewardship is fragile. DTAP flags datasets with no named contact.", 742 related: ["Data Steward","Data Governance","Accountability","D5 Longitudinal","DTAP Score"], 743 refs: [], 744 steward: "OpenTEAM", 745 framework: ["dtap"] 746 }, 747 { 748 letter: "E", 749 name: "Entry Gate", 750 emoji: "ðª", 751 accentBg: "#d8f3dc", 752 tags: ["eta"], 753 shortDef: "One of four binary pass/fail criteria in the ETA framework (G1âG4), each worth 10 points. Failing any gate prevents a tool from receiving a passing ETA score regardless of category scores.", 754 altDefs: "G1 Transparency · G2 Rights & Control · G3 No Abuse · G4 Safety & Stewardship. All four must pass for a tool to be ETA-eligible. Gates account for 40 of 100 possible points.", 755 agExample: "A powerful soil analysis tool with a proprietary data format that prevents farmer export would fail Gate G2 (Rights & Control) and cannot pass ETA regardless of other scores.", 756 etaRelevance: "The gate structure ensures minimum standards are non-negotiable. A tool scoring 60/60 on categories but failing one gate receives a failed ETA status.", 757 related: ["G1 Transparency","G2 Rights & Control","G3 No Abuse","G4 Safety & Stewardship","ETA Score"], 758 refs: [], 759 steward: "OpenTEAM", 760 framework: ["eta"] 761 }, 762 { 763 letter: "E", 764 name: "ETA Score", 765 emoji: "â", 766 accentBg: "#d8f3dc", 767 tags: ["eta"], 768 shortDef: "The 0â100 composite score from the Ethical Technology Assessment, combining 40 gate points (binary) and 60 category points (scored 0â5 per question), adjusted by confidence tier.", 769 altDefs: "Score = Σ(gate_pts) + Σ(cat_scores à 3) à confidence_modifier. Scores â¥70 = Eligible, 50â69 = Conditional, <50 or any gate fail = Ineligible.", 770 agExample: "A farmOS tool passing all 4 gates (40 pts) and averaging 3.5/5 across 12 category questions earns 40 + (3.5Ã12Ã5/3)=82 before confidence adjustment.", 771 etaRelevance: "The primary output of an ETA assessment. Published on the ETA card and used in the OpenTEAM FAIR registry to rank and filter tools.", 772 related: ["Confidence Tier","Entry Gate","ETA Card","Assessment Card","DTAP Score"], 773 refs: [], 774 steward: "OpenTEAM / Ag Knowledge Concordance", 775 framework: ["eta"] 776 }, 777 { 778 letter: "F", 779 name: "FAIR Principles", 780 emoji: "ð", 781 accentBg: "#dbeafe", 782 tags: ["fair","eta"], 783 shortDef: "Guidelines for 'good data management' that improve discovery and reuse of data by humans and computers. The four principles: Findable, Accessible, Interoperable, Reusable.", 784 altDefs: "Developed by Wilkinson et al. (2016, Nature). Each principle has specific sub-criteria for identifiers, protocols, metadata standards, and licensing.", 785 agExample: "The USDA registry applies FAIR principles by requiring tools and datasets to have stable URLs, documented APIs, standard formats, and clear reuse licenses.", 786 etaRelevance: "DTAP is grounded in FAIR. ETA also draws on FAIR through its Interoperability category and Commons Fit scoring.", 787 related: ["Findable (FAIR)","Accessible (FAIR)","Interoperable (FAIR)","Reusable (FAIR)","DTAP Score","Commons Fit"], 788 refs: ["https://www.go-fair.org/fair-principles/"], 789 steward: "GO FAIR", 790 framework: ["fair","eta","dtap"] 791 }, 792 { 793 letter: "F", 794 name: "Findable (FAIR Principle)", 795 emoji: "ð", 796 accentBg: "#dbeafe", 797 tags: ["fair"],
798 shortDef: "Data and metadata should be easy to find for both humans and computers. Each dataset should have a persistent, globally unique identifier and rich metadata.", 799 altDefs: "FAIR sub-criteria: F1 (persistent identifier), F2 (rich metadata), F3 (identifier in metadata), F4 (indexed in a searchable resource).", 800 agExample: "A soil health dataset registered in the OpenTEAM FAIR registry with a DOI and tagged metadata is findable. A CSV emailed by a researcher is not.", 801 etaRelevance: "Supports DTAP D2 (Provenance) â datasets must have stable identifiers and searchable metadata to score well.", 802 related: ["FAIR Principles","Accessible (FAIR)","Metadata","Open Data"], 803 refs: ["https://www.go-fair.org/fair-principles/"], 804 steward: "GO FAIR", 805 framework: ["fair"] 806 }, 807 { 808 letter: "G", 809 name: "G1 â Transparency", 810 emoji: "ð¡", 811 accentBg: "#d8f3dc", 812 tags: ["eta"], 813 shortDef: "First ETA Entry Gate (10 pts). The tool must have accessible, honest documentation describing what it does, who built it, how it processes data, and what its limitations are.", 814 altDefs: "Q: Is there a public URL documenting the tool's purpose, methods, and data flows? Is the documentation accurate and up to date?", 815 agExample: "A farm software app with a detailed user guide, open changelog, and published API docs passes G1. One with only a sales landing page fails.", 816 etaRelevance: "Gate G1 is a prerequisite for ETA eligibility. Connects to FAIR Findable (F2 metadata) and EU AI Act transparency requirements.", 817 related: ["Entry Gate","Data Transparency","ETA Score","G2 Rights & Control"], 818 refs: [], 819 steward: "OpenTEAM", 820 framework: ["eta"] 821 }, 822 { 823 letter: "G", 824 name: "G2 â Rights & Control", 825 emoji: "ð¡ï¸", 826 accentBg: "#d8f3dc", 827 tags: ["eta"], 828 shortDef: "Second ETA Entry Gate (10 pts). Farmers must retain meaningful control over their data: right to export, right to delete, right to see what is collected, no unauthorized secondary sale.", 829 altDefs: "Q: Does the tool allow full data export in an open format? Can users delete their data? Are data rights clearly stated?", 830 agExample: "A platform that locks yield maps into its proprietary format without export fails G2. One offering CSV/GeoJSON export on demand passes.", 831 etaRelevance: "Directly protects data sovereignty. Connects to GDPR rights (access, portability, erasure) and OpenTEAM's Ag Data Bill of Rights.", 832 related: ["Data Sovereignty","Data Portability","Consent","G1 Transparency","G3 No Abuse","ETA Score"], 833 refs: [], 834 steward: "OpenTEAM", 835 framework: ["eta"] 836 }, 837 { 838 letter: "G", 839 name: "G3 â No Abuse / No Lock-in", 840 emoji: "ð«", 841 accentBg: "#d8f3dc", 842 tags: ["eta"], 843 shortDef: "Third ETA Entry Gate (10 pts). The tool must not exploit data for purposes beyond the stated agreement, must not create anticompetitive lock-in, and must not surveil or manipulate users.", 844 altDefs: "Q: Does the tool sell farm data to third parties without consent? Does it create artificial switching costs? Does it use dark patterns to retain users?", 845 agExample: "A seed company app that uses yield data to adjust input pricing against the same farmer fails G3. An open platform with standard export formats passes.", 846 etaRelevance: "Targets the most harmful data practices. Connects to Purpose Limitation (GDPR) and data justice principles.", 847 related: ["Purpose Limitation","Data Ethics","Data Justice","G2 Rights & Control","Conditional Use"], 848 refs: [], 849 steward: "OpenTEAM", 850 framework: ["eta"] 851 }, 852 { 853 letter: "G", 854 name: "G4 â Safety & Stewardship", 855 emoji: "ð§âð§", 856 accentBg: "#d8f3dc", 857 tags: ["eta"], 858 shortDef: "Fourth ETA Entry Gate (10 pts). There must be a named point of contact, documented maintenance plan, and reasonable security practices protecting user data.", 859 altDefs: "Q: Is there a named maintainer or steward organization? Is there a security disclosure policy? Is the tool actively maintained?", 860 agExample: "An abandoned open-source tool with no maintainer and unpatched vulnerabilities fails G4. One with a named maintainer and regular security releases passes.", 861 etaRelevance: "Ensures tools are not orphaned risks. Connects to DTAP D6 (Governance) and Accountability principles.", 862 related: ["Accountability","Data Steward","Data Governance","G1 Transparency","ETA Score"], 863 refs: [], 864 steward: "OpenTEAM", 865 framework: ["eta"] 866 }, 867 { 868 letter: "I", 869 name: "Interoperable (FAIR Principle)", 870 emoji: "ð", 871 accentBg: "#dbeafe", 872 tags: ["fair","eta"], 873 shortDef: "A dataset's or system's ability to work with other datasets, applications, or workflows using shared standards. Key to the FAIR Principles and ETA's Interoperability category.",
874 altDefs: "FAIR: 'data need to be integrated with other data and to interoperate with applications or workflows for analysis, storage, and processing.'", 875 agExample: "A soil sensor using LoRaWAN with an MQTT broker and documented JSON schema is interoperable. One with a proprietary radio protocol and closed data format is not.", 876 etaRelevance: "One of 4 scored categories in ETA Software (15 pts max). Also scored in Commons Fit for both Hardware and Software.", 877 related: ["FAIR Principles","Commons Fit","Open Source","Open Data","API"], 878 refs: ["https://www.go-fair.org/fair-principles/"], 879 steward: "GO FAIR", 880 framework: ["fair","eta"] 881 }, 882 { 883 letter: "L", 884 name: "Lock-in", 885 emoji: "ð", 886 accentBg: "#fde8e0", 887 tags: ["eta"], 888 shortDef: "A condition where a user cannot easily switch to an alternative tool or export their data without significant cost, data loss, or technical barrier â typically created by proprietary formats.", 889 altDefs: "Vendor lock-in in agriculture often manifests as: proprietary data formats, no data export, platform-only APIs, or contractual barriers to switching.", 890 agExample: "Climate FieldView's proprietary shape file format for field boundaries creates mild lock-in. A platform with no export at all creates strong lock-in and fails ETA Gate G2.", 891 etaRelevance: "Gate G3 explicitly addresses lock-in as an abusive practice. Low Commons Fit scores often correlate with lock-in.", 892 related: ["G2 Rights & Control","G3 No Abuse","Commons Fit","Data Portability","Open Source"], 893 refs: [], 894 steward: "OpenTEAM", 895 framework: ["eta"] 896 }, 897 { 898 letter: "M", 899 name: "Machine Readable", 900 emoji: "ð¤", 901 accentBg: "#dbeafe", 902 tags: ["dtap","fair"], 903 shortDef: "Data available in a format that a computer, AI, or algorithm can process automatically â such as CSV, JSON, GeoJSON, XML, or NetCDF.", 904 altDefs: "Open Data Handbook: 'Machine-readable data must be structured data. Data in a format that can be automatically read and processed by a computer.'", 905 agExample: "Planting dates entered in a CSV are machine readable. The same data in a scanned PDF are not, even if legible to humans.", 906 etaRelevance: "Scored in DTAP D4 (Machine-Readability, 10 pts). Also relevant to ETA Interoperability category.", 907 related: ["Interoperable (FAIR)","D4 Machine-Readability","FAIR Principles","Open Data","Metadata"], 908 refs: ["https://opendatahandbook.org/glossary/en/terms/machine-readable/"], 909 steward: "Open Data Handbook", 910 framework: ["dtap","fair"] 911 }, 912 { 913 letter: "O", 914 name: "Open Source", 915 emoji: "ð", 916 accentBg: "#d8f3dc", 917 tags: ["eta"], 918 shortDef: "Software or hardware designs that are publicly accessible and can be modified and shared by all users, enabling transparency, community inspection, and collaborative improvement.", 919 altDefs: "Common open-source licenses relevant to ETA: GPL v3, AGPL, Apache 2.0, MIT (software); CERN OHL, TAPR OHL (hardware); CC BY, CC BY-SA (documentation/data).", 920 agExample: "farmOS is open source (GPLv2), inspectable and self-hostable. This earns strong ETA scores in G1 (Transparency) and Commons Fit.", 921 etaRelevance: "Open source is not required by ETA but strongly favors G1, G2, G3, Commons Fit, and Accessibility scores. Source-available or proprietary tools must demonstrate equivalent openness to score well.", 922 related: ["Commons Fit","G1 Transparency","G2 Rights & Control","Open Data","Lock-in"], 923 refs: [], 924 steward: "OSI / OpenTEAM", 925 framework: ["eta"] 926 }, 927 { 928 letter: "P", 929 name: "Provenance", 930 emoji: "ðï¸", 931 accentBg: "#fdf5d9", 932 tags: ["dtap"], 933 shortDef: "The documented history of how data was collected, processed, and curated â including collection methods, instruments, calibration records, and any transformations applied.", 934 altDefs: "W3C PROV standard defines provenance as 'information about entities, activities, and people involved in producing a piece of data or thing.'", 935 agExample: "A crop yield dataset with documented GPS equipment models, calibration intervals, combine settings, and known field-edge artifacts has strong provenance.", 936 etaRelevance: "DTAP D2 (Provenance) directly scores this dimension. Weak provenance is one of the most common DTAP flags.", 937 related: ["D2 Provenance","Accuracy","Metadata","DTAP Score","Machine Readable"], 938 refs: [], 939 steward: "OpenTEAM / W3C PROV", 940 framework: ["dtap"] 941 }, 942 { 943 letter: "P", 944 name: "Purpose Limitation", 945 emoji: "ð¯", 946 accentBg: "#fde8e0", 947 tags: ["eta","gdpr"], 948 shortDef: "The principle that personal or agricultural data is only collected for specific, explicit, and legitimate purposes and is not used beyond those stated purposes without fresh consent.", 949 altDefs: "GDPR Art. 5: data shall be 'collected for specified, explicit and legitimate purposes and not further processed in a manner that is incompatible with those purposes.'", 950 agExample: "Using precision irrigation sensor data to generate targeted marketing for pesticides â without farmer consent â violates purpose limitation and fails ETA Gate G3.", 951 etaRelevance: "Evaluated in ETA Gate G3 (No Abuse) and DTAP D1 (Consent). A clear statement of data use purpose is required to pass G1 (Transparency).",
952 related: ["G3 No Abuse","Consent","Data Ethics","Data Minimization","GDPR"], 953 refs: ["https://gdpr-info.eu/art-5-gdpr/"], 954 steward: "GDPR / OpenTEAM", 955 framework: ["eta","dtap"] 956 }, 957 { 958 letter: "R", 959 name: "Resilience", 960 emoji: "ðª", 961 accentBg: "#d8f3dc", 962 tags: ["eta"], 963 shortDef: "A scored ETA Hardware category (0â5) measuring whether a tool can be repaired, maintained, and operated by its users without dependence on a single vendor or service for continued operation.", 964 altDefs: "Resilience asks: Can farmers fix this tool? Are spare parts available? Does it work offline? Would it survive the vendor closing?", 965 agExample: "A soil moisture sensor with an open repair manual, standard connectors, and local data storage scores high on Resilience. One requiring factory servicing for any repair scores low.", 966 etaRelevance: "One of 4 scored categories in ETA Hardware (15 pts max). Reflects right-to-repair principles and long-term agricultural technology resilience.", 967 related: ["Commons Fit","Open Source","G4 Safety & Stewardship","Lock-in"], 968 refs: [], 969 steward: "OpenTEAM", 970 framework: ["eta"] 971 }, 972 { 973 letter: "R", 974 name: "Resource Ethics", 975 emoji: "ð±", 976 accentBg: "#d8f3dc", 977 tags: ["eta"], 978 shortDef: "A scored ETA Hardware category (0â5) measuring the environmental impact of a tool: energy use, materials sourcing, end-of-life disposal, and lifecycle footprint.", 979 altDefs: "Resource Ethics covers: embedded carbon in manufacturing, energy draw during operation, repairability, recyclability, and conflict mineral sourcing.", 980 agExample: "A solar-powered soil sensor made from standard components with a published disassembly guide scores high. A battery-hungry sensor with non-replaceable proprietary batteries scores low.", 981 etaRelevance: "One of 4 scored categories in ETA Hardware only (15 pts max). No equivalent in Software ETA â replaced by Data Ethics.", 982 related: ["Commons Fit","Resilience","ETA Score"], 983 refs: [], 984 steward: "OpenTEAM", 985 framework: ["eta"] 986 }, 987 { 988 letter: "R", 989 name: "Reusable (FAIR Principle)", 990 emoji: "â»ï¸", 991 accentBg: "#dbeafe", 992 tags: ["fair","dtap"], 993 shortDef: "Data and metadata should be well-described, clearly licensed, and formatted to enable (re)use, replication, and combination with other datasets in different settings.", 994 altDefs: "FAIR: 'the ultimate goal of FAIR is to optimise the reuse of data.' Requires rich provenance, clear licenses, and domain-relevant community standards.", 995 agExample: "A yield dataset released under CC0 with ISO 11783 field codes, documented methodology, and complete metadata is reusable. One with no license and ad-hoc column names is not.", 996 etaRelevance: "Supports DTAP D3 (Access) and D6 (Governance). Tools enabling reusable data output earn higher ETA Commons Fit scores.", 997 related: ["FAIR Principles","Accessible (FAIR)","Open Data","D3 Access","Metadata"], 998 refs: ["https://www.go-fair.org/fair-principles/"], 999 steward: "GO FAIR", 1000 framework: ["fair","dtap"] 1001 }, 1002 { 1003 letter: "S", 1004 name: "Social Ethics", 1005 emoji: "ð¤", 1006 accentBg: "#f0e8ff", 1007 tags: ["eta"], 1008 shortDef: "A scored ETA Hardware category (0â5) measuring whether a tool's design, supply chain, and deployment respect worker rights, community equity, and inclusive access.", 1009 altDefs: "Social Ethics asks: Were workers involved in manufacturing fairly treated? Does the tool accommodate diverse users including those with limited connectivity or tech literacy?", 1010 agExample: "A hardware tool designed with small-scale farmer input, manufactured without conflict minerals, with a multilingual interface scores high on Social Ethics.", 1011 etaRelevance: "One of 4 scored categories in ETA Hardware (15 pts max). Connects to data justice and the CARE Principles.", 1012 related: ["Data Justice","CARE Principles","Accessibility","ETA Score","Resource Ethics"], 1013 refs: [], 1014 steward: "OpenTEAM", 1015 framework: ["eta"] 1016 }, 1017 { 1018 letter: "T", 1019 name: "Transparency", 1020 emoji: "ðª", 1021 accentBg: "#d8f3dc", 1022 tags: ["eta","gdpr"], 1023 shortDef: "The condition in which individuals are informed and have access to comprehensive information about their data â what is being collected, how it is used, and who has access.", 1024 altDefs: "EU AI Act Principle: systems must be transparent about their capabilities and limitations. GDPR: lawful basis for processing must be communicated clearly.", 1025 agExample: "An ETA-compliant tool publishes a plain-language data use policy, explains its AI/ML methods, and notifies farmers of data sharing before it occurs.", 1026 etaRelevance: "The foundation of ETA Gate G1. Also measured in Commons Fit (tool documentation) and Data Ethics (secondary use disclosure).", 1027 related: ["G1 Transparency","Data Transparency","Accountability","Open Source"], 1028 refs: [], 1029 steward: "EU AI Act / OpenTEAM / GDPR", 1030 framework: ["eta","dtap"] 1031 }, 1032 { 1033 letter: "V", 1034 name: "Versioning", 1035 emoji: "ð", 1036 accentBg: "#fdf5d9", 1037 tags: ["dtap","eta"], 1038 shortDef: "The practice of tracking and documenting changes to a tool, dataset, or glossary over time â enabling reproducibility, comparison, and transparent evolution of content.", 1039 altDefs: "Semantic versioning (v1.0.0): Major.Minor.Patch. ETA framework documents use this convention. Dataset versioning typically follows calendar versioning (YYYY.MM).", 1040 agExample: "DTAP D5 (Longitudinal Integrity) scores datasets that maintain version history with changelogs. ETA cards include the framework version used for the assessment.", 1041 etaRelevance: "Required for DTAP D5 (Longitudinal Integrity) scoring. Recommended for all ETA assessments to enable comparison over time.", 1042 related: ["D5 Longitudinal Integrity","DTAP Score","Assessment Card","Metadata"], 1043 refs: [], 1044 steward: "OpenTEAM", 1045 framework: ["dtap","eta"] 1046 } 1047]; 1048 1049// ââ RENDER ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 1050function tagClass(t){ 1051 return {eta:'tag-eta',dtap:'tag-dtap',fair:'tag-fair',gdpr:'tag-gdpr',role:'tag-role',data:'tag-data'}[t]||'tag-data'; 1052} 1053function tagLabel(t){ 1054 return {eta:'ETA',dtap:'DTAP',fair:'FAIR',gdpr:'GDPR',role:'Role',data:'Data'}[t]||t; 1055} 1056 1057function renderGlossary(terms){ 1058 const container = document.getElementById('glossary-content'); 1059 const letters = [...new Set(terms.map(t=>t.letter))].sort(); 1060 container.innerHTML = ''; 1061
1062 letters.forEach(letter => { 1063 const letterTerms = terms.filter(t=>t.letter===letter); 1064 const section = document.createElement('div'); 1065 section.className = 'letter-section'; 1066 section.id = `letter-${letter}`; 1067 section.innerHTML = ` 1068 <div class="letter-anchor"> 1069 <span class="letter-glyph">${letter}</span> 1070 <div class="letter-rule"></div> 1071 </div> 1072 `; 1073 letterTerms.forEach(term => { 1074 section.appendChild(termCard(term)); 1075 }); 1076 container.appendChild(section); 1077 }); 1078 1079 updateAlphaCounts(terms); 1080 document.getElementById('count-badge').textContent = `${terms.length} term${terms.length!==1?'s':''}`; 1081 document.getElementById('empty-state').classList.toggle('visible', terms.length===0); 1082} 1083 1084function termCard(term){ 1085 const div = document.createElement('div'); 1086 div.className = 'term-card'; 1087 div.dataset.name = term.name.toLowerCase(); 1088 div.dataset.def = (term.shortDef+' '+term.altDefs).toLowerCase(); 1089 div.dataset.tags = term.tags.join(','); 1090 div.dataset.framework = (term.framework||[]).join(','); 1091 1092 const tagsHtml = term.tags.map(t=>`<span class="term-tag ${tagClass(t)}">${tagLabel(t)}</span>`).join(''); 1093 const relatedHtml = (term.related||[]).map(r=>`<a class="related-pill" href="#" onclick="searchFor('${r}');return false">${r}</a>`).join(''); 1094 const refsHtml = (term.refs||[]).filter(r=>r).map(r=>`<a href="${r}" target="_blank" rel="noopener">${r}</a>`).join('<br>'); 1095 1096 div.innerHTML = ` 1097 <div class="eta-strip"></div> 1098 <div class="term-header" onclick="toggleCard(this)"> 1099 <div class="term-accent" style="background:${term.accentBg}">${term.emoji}</div> 1100 <div class="term-header-text"> 1101 <div class="term-name">${term.name}</div> 1102 <div class="term-def">${term.shortDef}</div> 1103 <div class="term-tags">${tagsHtml}</div> 1104 </div> 1105 <button class="term-toggle" aria-label="Expand term"> 1106 <svg viewBox="0 0 10 10" stroke-width="2" stroke-linecap="round"><path d="M2 4l3 3 3-3"/></svg> 1107 </button> 1108 </div> 1109 <div class="term-body"> 1110 <div class="term-body-inner"> 1111 <div class="detail-block full"> 1112 <div class="detail-label">Full Definition</div> 1113 <div class="detail-content">${term.shortDef}</div> 1114 </div> 1115 ${term.altDefs ? `<div class="detail-block full"> 1116 <div class="detail-label">Alternative / Framework Definitions</div> 1117 <div class="detail-content">${term.altDefs}</div> 1118 </div>` : ''} 1119 ${term.agExample ? `<div class="detail-block full"> 1120 <div class="detail-label">Agricultural / ETA Example</div> 1121 <div class="detail-content">${term.agExample}</div> 1122 </div>` : ''} 1123 ${term.etaRelevance ? `<div class="detail-block"> 1124 <div class="detail-label">ETA/DTAP Relevance</div> 1125 <div class="detail-content">${term.etaRelevance}</div> 1126 </div>` : ''} 1127 ${relatedHtml ? `<div class="detail-block"> 1128 <div class="detail-label">Related Terms</div> 1129 <div class="detail-content">${relatedHtml}</div> 1130 </div>` : ''} 1131 ${refsHtml ? `<div class="detail-block"> 1132 <div class="detail-label">References</div> 1133 <div class="detail-content">${refsHtml}</div> 1134 </div>` : ''} 1135 ${term.steward ? `<div class="detail-block"> 1136 <div class="detail-label">Steward</div> 1137 <div class="detail-content">${term.steward}</div> 1138 </div>` : ''} 1139 </div> 1140 </div> 1141 `; 1142 return div; 1143} 1144 1145function toggleCard(header){ 1146 const card = header.closest('.term-card'); 1147 const isOpen = card.classList.contains('open'); 1148 // Optionally close others 1149 card.classList.toggle('open', !isOpen); 1150} 1151 1152function updateAlphaCounts(terms){ 1153 document.querySelectorAll('.alpha-nav a[data-letter]').forEach(a=>{ 1154 const letter = a.dataset.letter; 1155 const count = terms.filter(t=>t.letter===letter).length; 1156 a.querySelector('.alpha-count').textContent = count || ''; 1157 a.style.opacity = count ? '1' : '0.3'; 1158 a.style.pointerEvents = count ? '' : 'none'; 1159 }); 1160} 1161 1162// ââ SEARCH & FILTER ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 1163let activeFilter = 'all'; 1164let searchQuery = ''; 1165 1166function applyFilters(){ 1167 const q = searchQuery.toLowerCase().trim(); 1168 const filtered = TERMS.filter(term => { 1169 const matchFilter = activeFilter === 'all' || (term.framework||[]).includes(activeFilter) || term.tags.includes(activeFilter); 1170 const matchSearch = !q || 1171 term.name.toLowerCase().includes(q) || 1172 term.shortDef.toLowerCase().includes(q) || 1173 (term.altDefs||'').toLowerCase().includes(q) || 1174 (term.agExample||'').toLowerCase().includes(q) || 1175 (term.tags||[]).some(t=>t.includes(q)); 1176 return matchFilter && matchSearch; 1177 }); 1178 renderGlossary(filtered); 1179} 1180 1181document.getElementById('search-input').addEventListener('input', function(){ 1182 searchQuery = this.value; 1183 applyFilters(); 1184}); 1185 1186document.querySelectorAll('.filter-pill').forEach(btn=>{ 1187 btn.addEventListener('click', ()=>{ 1188 document.querySelectorAll('.filter-pill').forEach(b=>b.classList.remove('active')); 1189 btn.classList.add('active');
1190 activeFilter = btn.dataset.filter; 1191 applyFilters(); 1192 }); 1193}); 1194 1195function searchFor(term){ 1196 const input = document.getElementById('search-input'); 1197 input.value = term; 1198 searchQuery = term; 1199 activeFilter = 'all'; 1200 document.querySelectorAll('.filter-pill').forEach(b=>b.classList.remove('active')); 1201 document.querySelector('[data-filter="all"]').classList.add('active'); 1202 applyFilters(); 1203 input.focus(); 1204 window.scrollTo({top:200,behavior:'smooth'}); 1205} 1206 1207// ââ ALPHA NAV ACTIVE STATE ââââââââââââââââââââââââââââââââââââââââââââââââââââ 1208const obs = new IntersectionObserver(entries=>{ 1209 entries.forEach(e=>{ 1210 if(e.isIntersecting){ 1211 const letter = e.target.id.replace('letter-',''); 1212 document.querySelectorAll('.alpha-nav a').forEach(a=>a.classList.toggle('active', a.dataset.letter===letter)); 1213 } 1214 }); 1215},{threshold:.3,rootMargin:'-100px 0px -60% 0px'}); 1216 1217// ââ INIT ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 1218renderGlossary(TERMS); 1219document.querySelectorAll('.letter-section').forEach(s=>obs.observe(s)); 1220</script>
1220 1221</body> 1222</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.